【Telink-泰凌微电子 B91通用开发套件】+串口nr_micro_shell移植
下面测试学习串口操作。参考例子,实现串口的发送接收,printf的重定向和nr_micro_shell移植。首先对串口初始化//uart
#define UART0_RTX_PIN UART0_RX_PB3 //SINGLE
#define UART0_TX_PIN UART0_TX_PB2
#define UART0_RX_PIN UART0_RX_PB3
#define UART0_CTS_PIN UART0_CTS_PA1
#define UART0_RTS_PIN UART0_RTS_PA2
//UART
uart_reset(UART0);
uart_rtx_en(UART0);
uart_set_pin(UART0_TX_PIN,UART0_RX_PIN);
uart_cal_div_and_bwpc(115200, sys_clk.pclk*1000*1000, &div, &bwpc);
uart_init(UART0, div, bwpc, UART_PARITY_NONE, UART_STOP_BIT_ONE);
uart_tx_irq_trig_level(UART0, 0);
uart_rx_irq_trig_level(UART0, 1);
uart_set_irq_mask(UART0, UART_RX_IRQ_MASK|UART_ERR_IRQ_MASK);
plic_interrupt_enable(IRQ19_UART0); //if you want to use UART1,the parameter is - IRQ18_UART1串口发送
int stdout_putchar (int ch)
{
uart_clr_tx_done(UART0);
uart_send_byte(UART0, ch&0xff);
while(uart_tx_is_busy(UART0));
return ch;
}串口中断接收
/**
* @brief This function serves to handle the interrupt of MCU
* @param none
* @return none
*/
_attribute_ram_code_sec_ void uart0_irq_handler(void)// if you want to use UART1,the function is - uart1_irq_handler()
{
if(uart_get_irq_status(UART0, UART_RX_ERR))
{
gpio_toggle(LED4);
uart_clr_irq_status(UART0,UART_CLR_RX);// it will clear rx_fifo and rx_err_irq ,rx_buff_irq,so it won't enter rx_buff_irq interrupt.
uart_reset(UART0); //clear hardware pointer
uart_clr_rx_index(UART0); //clear software pointer
}
if(uart_get_irq_status(UART0, UART_RXBUF_IRQ_STATUS))
{
fifo_push(&print_uart_rx,uart_read_byte(UART0));
}
}
测试发送接收,即将接收的数据发送出去
if(fifo_pop(&print_uart_rx,&ch) == 0)
{
stdout_putchar(ch);
}
硬件链接,通过USB转串口连接开发板的PB2,PB3脚。
下一步重定向printf输出。
首先关闭sdk中的printf功能。
实现如下函数
__attribute__((used)) int _write(int fd, const unsigned char *buf, int size)
{
(void) fd;
int i;
for (i = 0; i < size; i++){
stdout_putchar(buf);
}
return i;
}
在需要printf打印输出的文件包含头文件stdio.h即可。
下面移植nr_micro_shell,下载源码,放入工程目录内,然后配置shell。
然后初始化shell,在循环中处理串口接收的字符。
void main_loop (void)
{
uint8_t ch;
gpio_toggle(LED1);
delay_ms(50);
if(fifo_pop(&print_uart_rx,&ch) == 0)
{
//stdout_putchar(ch);
shell(ch);
gpio_toggle(LED3);
}
}
工程代码:
页:
[1]