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

CC1310串口问题

CC1310在uarttask_int()初始化完成后未进入BIOS_start(),串口外设115200波特率发出大数据,设备出现串口异常。具体表现为串口再收到数据无中断响应,而其他部分运行正常,请教此问题如何解决。

Felix ZF:

你好!

你说的未进入BIOS_start(),是指在代码中将BIOS_start()屏蔽掉不执行这条语句吗?

如果不执行BIOS_start(),不会开启RTOS的scheduler,task应该不会得到执行。

请问,你所说的“串口外设115200波特率发出大数据”具体内容是什么?另外,如果未进入BIOS_start(),如何判定“而其他部分运行正常”

user1013622:

回复 Felix ZF:

后期经过反复测试,发现故障现象应该是串口在某些条件下会出现不响应中断,是否有措施重新对串口初始化?

Eggsy Pang:

回复 user1013622:

是用例程的Uart的例子吗?是否可以把代码贴出来?

user1013622:

回复 Eggsy Pang:

当uart收到多的异常数据时,有时会发生看门狗复位。出现异常以后,通过运行状态灯能看到系统在运行,但是串口已经无法进入callback。

/***** Function definitions *****/

// Callback functionvoid Uart_ReadCallback(UART_Handle handle, void *rxBuf, size_t size){ UART_read(uart, Uart_RxTempBuf,1);/**/ if (Uart_RxTempBuf[0]==0x7E) { length=0;

Uart_TxTempBuf[length]=Uart_RxTempBuf[0]; uart_rece=1; length++; } else if (uart_rece==1) { Uart_TxTempBuf[length]=Uart_RxTempBuf[0]; length++; if (Uart_RxTempBuf[0]==0x0d) { uart_start=1; uart_rece=0; } } else { uart_start=0; uart_rece=0; }

}

// Callback functionvoid Uart_WriteCallback(UART_Handle handle, void *txBuf, size_t size){

// Start another read, with size the same as it was during first call to UART_read() UART_read(uart, Uart_RxTempBuf, 1);

}

void UartTask_init(void) {

/* Create event used internally for state changes */ Event_Params eventParam; Event_Params_init(&eventParam); Event_construct(&uartEvent, &eventParam); uartEventHandle = Event_handle(&uartEvent);

/* Create the node task */ Task_Params_init(&uartTaskParams); uartTaskParams.stackSize = UART_TASK_STACK_SIZE; uartTaskParams.priority = UART_TASK_PRIORITY; uartTaskParams.stack = &uartTaskStack; Task_construct(&uartTask, uartTaskFunction, &uartTaskParams, NULL); /* Create a UART with data processing off. */ UART_Params_init(&uartParams); uartParams.readMode = UART_MODE_CALLBACK;// uartParams.readCallback = Uart_ReadCallback; uartParams.writeCallback = Uart_WriteCallback; uartParams.writeMode = UART_MODE_CALLBACK; uartParams.writeDataMode = UART_DATA_BINARY;// uartParams.readDataMode = UART_DATA_BINARY;// uartParams.readReturnMode = UART_RETURN_FULL; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudRate = 115200; 00; uart = UART_open(Board_UART0, &uartParams);

if (uart == NULL) { System_abort("Error opening the UART"); }

}

static void uartTaskFunction(UArg arg0, UArg arg1){

for (;;) { System_printf("Running task2 function\n");

if (Semaphore_getCount(semHandle) == 0) { System_printf("Sem blocked in task3\n"); }

/* Get access to resource */ Semaphore_pend(semHandle, BIOS_WAIT_FOREVER);

if (uart_start==1) { //UART_read(uart, Uart_RxTempBuf, sizeof(Uart_RxTempBuf));

ProtocolRecProcess1();

//UART_write(uart, Uart_TxTempBuf, length); //length=0; // } /* Unlock resource */ Semaphore_post(semHandle); Task_sleep(sleepTickCount); }}

user1013622:

回复 user1013622:

没有人解答这个问题吗

赞(0)
未经允许不得转载:TI中文支持网 » CC1310串口问题
分享到: 更多 (0)