TI中文支持网
TI专业的中文技术问题搜集分享网站

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);
}

th smi:

应该有人遇到过吧?  每次接收 不能超过16字节。

Yue TANG:

回复 th smi:

一般处理器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

th smi:

回复 Yue TANG:

串口一次性发送大于16个字节,  中断只进去16次。   该怎么处理了?  思路是怎样的。   或者用其他 串口接收方法。

 ring buff 这个 free os 可以做的。

Yonghua Pan:

回复 th smi:

你要不要参考一下uart_dma,使用DMA来做。

赞(0)
未经允许不得转载:TI中文支持网 » uart 接收中断, 不能超过16字节
分享到: 更多 (0)