瑞薩RZ/N2L MPU
RZ/N2L是一種工業以太網通信用MPU,可輕松將網絡功能添加到工業設備中。它搭載支持TSN的三端口千兆以太網交換機和EtherCAT從控制器,可支持EtherCAT、PROFINET RT/IRT、EtherNet/IP、OPC UA等主要的工業以太網通信協議。它對網絡專用配套芯片加以優化,無需大幅改變設備的內部配置即可直接連接并快速訪問外部應用主機CPU。
此外,Arm Cortex-R52的最大工作頻率為400MHz,外設功能包括帶ECC的大容量RAM與ΔΣ I/F、A/D轉換器、PWM定時器、UART和CAN等,可在單個芯片上實現遠程I/O、傳感器集線器、變頻器和網關。
瑞薩RZ/T2M MPU
RZ/T2M是一款行業領先的高性能、多功能MPU,可實現AC伺服系統和工業電機等工業設備的高速處理、高精度控制和功能安全。RZ/T2M具有最大頻率為800 MHz的雙Arm Cortex-R52內核,可進行實時控制,而且還擁有能夠與CPU直接連接的大容量緊密耦合內存(576KB),以實現高性能實時處理。
此外,它還可以將電機控制的外設布置到能直接連接至CPU的LLPP(低延遲外設端口)上,來實現較低的延遲訪問。RZ/T2M擁有多協議編碼器硬件接口,可為A-format、EnDat 和BiSS等各種絕對編碼器協議提供支持。此外,RZ/T2M還擁有一個3端口的千兆以太網交換機,可為TSN標準及EtherCAT、PROFINET RT/IRT和EtherNet/IP等工業以太網協議提供支持,而無需額外的以太網交換機IC。
在項目調試過程中經常會用到printf函數,但是有時候printf函數需要運行在不打開中斷的情況下,但是官方FSP給出的UART驅動使用的是中斷模式,下面介紹一種使用查詢模式實現UART的方式。
一
FSP的配置
1
添加UART模塊,為了使用printf設置fsp配置器如下,選擇使用fifo模式來提高效率,UART的通道可以根據自己的硬件設計任意選取。
2
如果使用標準輸入函數,需要選擇接收UART的接收FIFO的trigger level是1,這樣只要收到一個數據就可以產生uart接收標志。
二
編譯器配置
在工程上點右鍵選擇Properties → C/C++ Build → setting,然后按照下圖來設置編譯器。
選擇Do not use syscalls。
三
添加代碼
1
添加初始化程序
static R_SCI0_Type *uart_reg=NULL; void uart_no_intp_init(uart_ctrl_t * const p_api_ctrl, uart_cfg_t const * const p_cfg) { if(uart_reg != NULL)return; R_SCI_UART_Open(p_api_ctrl, p_cfg); R_BSP_IrqDisable(p_cfg->txi_irq); R_BSP_IrqDisable(p_cfg->tei_irq); R_BSP_IrqDisable(p_cfg->rxi_irq); R_BSP_IrqDisable(p_cfg->rxi_irq); uart_reg = ((sci_uart_instance_ctrl_t *)p_api_ctrl)->p_reg; }
調用這個函數時,將hal_data.c的uart實例的cfg和ctrl作為參數即可,調用完后UART的寄存器地址會保存在uart_reg內,以備write和read使用。
2
添加write和read函數
int32_t _write(int32_t file_no,int8_t *buffer,uint32_t writing_b) { uint32_t tempcnt=writing_b; (void) ((file_no)); if(writing_b ==0)return 0; if(uart_reg==NULL)return -1; while(tempcnt!=0) { while(uart_reg->FTSR>13); uart_reg->TDR_b.TDAT = (uint8_t)*buffer; __DSB(); buffer++; tempcnt--; } return writing_b; } /******************************************************************************* * Function Name: SioRead * Description : The character strings specified with buffer is input for * : n bytes from serial port.The input is determined by file number fileno. * : The effective input in this version is STDIN. * Arguments : int32_t file_no ; I : File number to be the target of reading * : int_t * buffer ; O : Pointer to the area in which reading data is stored * : uint32_t reading_b; I : Reading bytes * Return Value : >0 : Number of receiving characters * : -1 : File number, receiving data error *******************************************************************************/ int32_t _read (int32_t file, int8_t *ptr, uint32_t len) { (void) ((file)); if(uart_reg==NULL)return 0; if(uart_reg->FRSR_b.R!=0) { *ptr = (uint8_t)uart_reg->RDR_b.RDAT; __DSB(); } else { return 0; } return 1; }
3
使用方法
先調用初始化函數后就可以使用了,下面是一個初始化的調用例子:
uart_no_intp_init(&g_uart0_ctrl,&g_uart0_cfg);
g_uart0_ctrl和g_uart0_cfg是 FSP生成的兩個變量。
審核編輯:劉清
-
以太網通信
+關注
關注
2文章
52瀏覽量
11082 -
變頻器
+關注
關注
251文章
6584瀏覽量
145806 -
交換機
+關注
關注
21文章
2656瀏覽量
100174 -
EtherCAT控制器
+關注
關注
0文章
17瀏覽量
601
原文標題:在RZ/T2M和RZ/N2L中Printf添加方法(UART使用查詢模式)
文章出處:【微信號:瑞薩MCU小百科,微信公眾號:瑞薩MCU小百科】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論