Atmel软件框架刚入门,通常使用MPLab / PIC设备,但是对于我的项目,我需要构建一个能够将6个UART设备连接在一起的UART路由器,因此我选择了SAMD20J16芯片。到目前为止,我已经使用ATMEL配置了所有USART模块的驱动程序,其中USART HAL_ASYNC驱动程序开始。
我已经获得了可以写入所有6个USART模块的设备,并且已经获得了读取中断来触发,但是我无法从usart缓冲区中读取数据。就目前而言,香港专业教育学院将其缩减为可能的最小代码,以尝试找出其为何不起作用,这可能只是我的一个简单疏忽,但我已经在互联网上搜索了2天,并且找到了所有我可以使用的文档ASF4中的HAL_ASYNC驱动程序充其量是不稳定的。
#include <atmel_start.h>
int main(void)
{
int nRead=0;
uint8_t rxPData;
/* Initializes MCU, drivers and middleware */
atmel_start_init();
//DECLARE UART STRUCTURTES
struct io_descriptor *uartD1;
usart_async_get_io_descriptor(&USART_0, &uartD1);
usart_async_enable(&USART_0);
struct io_descriptor *uartP;
usart_async_get_io_descriptor(&USART_1, &uartP);
usart_async_enable(&USART_1);
struct io_descriptor *uartD3;
usart_async_get_io_descriptor(&USART_2, &uartD3);
usart_async_enable(&USART_2);
struct io_descriptor *uartD4;
usart_async_get_io_descriptor(&USART_3, &uartD4);
usart_async_enable(&USART_3);
struct io_descriptor *uartS;
usart_async_get_io_descriptor(&USART_4, &uartS);
usart_async_enable(&USART_4);
struct io_descriptor *uartD2;io_write(uartP, (uint8_t *) "UART P\r\n", 8);
usart_async_get_io_descriptor(&USART_5, &uartD2);
usart_async_enable(&USART_5);
void uartP_callback(const struct usart_async_descriptor *const io_descriptor){
if(usart_async_is_rx_not_empty(uartP)){
io_write(uartP, (uint8_t *) "TEST P\r\n", 8);
nRead=io_read(uartP,&rxPData,6);
io_write(uartP,&rxPData,nRead);
}
}
usart_async_register_callback(&USART_1, USART_ASYNC_RXC_CB, uartP_callback);
while (1) {
}
}
现在,观察到的行为是我发送UART数据包触发中断,并传递IF rx_buffer_is_not_empty并发回“ TEST P \ r \ n”。经过一些测试后,我添加了这行代码,只是为了查看中断是否正在触发。
但是,无论我发送给它的输入大小如何,它都永远不会回传发送给它的任何数据。
现在,我只是在尝试验证我可以在所有usart端口上进行接收和发送,最终代码不会在接收中断内进行发送。