uart 接收中断, 不能超过16字节
请教一下TI的工程师, 一次只能接收16个字节。 我知道cc3200的FIFO只有16个字节。 有什么方法可以接收更多的字节码?
这是代码。
UARTFIFODisable(UARTA1_BASE);
// Register interrupt handler for UART
//
MAP_UARTIntRegister(/*UARTA0_BASE*/UARTA1_BASE,UARTIntHandler);
MAP_UARTIntEnable(/*UARTA0_BASE*/UARTA1_BASE,UART_INT_RT);
MAP_UARTConfigSetExpClk(UARTA1_BASE,
MAP_PRCMPeripheralClockGet(PRCM_UARTA1),
UART_BAUD_RATE, (UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE |
UART_CONFIG_PAR_NONE)
); //init uart1;
//
// Configure the UART Tx and Rx FIFO level to 1/8 i.e 2 characters
//
UARTFIFOLevelSet(/*UARTA0_BASE*/UARTA1_BASE ,UART_FIFO_TX1_8,UART_FIFO_RX1_8);
UARTEnable(UARTA1_BASE);
static void UARTIntHandler()
{
unsigned long ulStatus = MAP_UARTIntStatus(UARTA1_BASE, true);
unsigned char temp_data;
if(UART_INT_RT & ulStatus)
{
ulStatus ^= UART_INT_RT;
MAP_UARTIntClear(UARTA1_BASE, UART_INT_RT);
temp_data = HWREG(UARTA1_BASE + UART_O_DR);
Report("%d ", temp_data);
}
MAP_UARTIntClear(UARTA1_BASE, ulStatus);
}
应该有人遇到过吧? 每次接收 不能超过16字节。
一般处理器UART硬件FIFO都不会太大的,16就很大了,以前51的都只有一个字节FIFO。 这个不影响,可自己增加软件的FIFO。
即,中断后,读取硬件FIFO的数据到内存里(通常是一个ring buff)。然后按照你的需求改造,比如达到一定的字节数再处理等。
如果你使用TI-RTOS,里面已经包含了类似的驱动。
可参考下面的两个link,结合看,CC3200的只给了初始化的代码,下面CC26XX还给出了怎么读写。
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_16_01_14/exports/tirtos_full_2_16_01_14/products/tidrivers_cc32xx_2_16_01_13/docs/doxygen/html/_u_a_r_t_c_c3200_8h.html
http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/2_20_00_06/exports/tirtos_full_2_20_00_06/products/tidrivers_cc13xx_cc26xx_2_20_00_08/docs/doxygen/html/_u_a_r_t_c_c26_x_x_8h.html
串口一次性发送大于16个字节, 中断只进去16次。 该怎么处理了? 思路是怎样的。 或者用其他 串口接收方法。
ring buff 这个 free os 可以做的。
你要不要参考一下uart_dma,使用DMA来做。