Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
大家好、
用于 MSP430的 ccsv7;
适用于 msp43X 2.20.0.06的 TI-RTOS
我在 MSP-EXP5529LP 开发板中运行一个 TI-RTOS UART 示例,并在 Board_initGeneral()函数中将 SMCLK 和 MCLK 时钟配置为24MHZ (通过 DCO 将4M XT2加倍)
#include #include UARTUSCI_Object uartUSCIAObjects[MSP_EXP430F5529LP_UARTCOUNT]; const UARTUSCIA_BAUDRATEXConfig uartUSCIA波特 率[]={ /*{波特率、输入时钟、预分频器、UCBRFx、UCBRSx、 过采样}*/ {//我的加法 .outputBudrate = 115200、 .inputClockFreq = 24000000、 .prescalar = 13、 hwRegUCBRFx = 0、 hwRegUCBRSx=0、 过采样= 1. }、 { .outputBudrate = 115200、 .inputClockFreq = 8192000、 .prescalar = 4、 hwRegUCBRFx = 7、 hwRegUCBRSx=0、 过采样= 1. }、 {9600、32768、 3、 0、 3、 0}、 }; const UARTUSCIA_HWAttrs uartUSCIAHWAttrs[MSP_EXP430F5529LP_UARTCOUNT]={ { baseAddr = USCI_A1_BASE、 时钟源= USCI_A_UART_CLOCKSOURCE_MCLK、//###### MCLK = 24000000####
.bitOrder = USCI_A_UART_LSB_FIRST、 numBudrateEndries = sizeof (uartUSCIABAURATS)/sizeof (UARTUSCIA_BAUDRAateConfig)、 .budrateLUT = uartUSCIA波特 率 }、 }; const UART_Config UART_CONFIG[]={ { .fxnTablePtr =&UARTUSCIA_fxnTable、 .object = uartUSCIAObjects[0], hwAttrs = uartUSCIAHWAttrs[0](&U) }、 {NULL、NULL、NULL} };
空 uartFxn (UARg arg0、UARg arg1) { UART_Handle UART; UART_Params uartParams; const char echoPrompt[]="\fEchoing Characters:\r\n"; //创建一个数据处理关闭的 UART。 UART_PARAMS_INIT (uartParams); uartParams.writeDataMode = UART_DATA_BINARY; uartParams.readDataMode = UART_DATA_BINARY; uartParams.readReturnMode = UART_return_full; uartParams.readEcho = UART_ECHO_OFF; uartParams.baudrate = 115200; UART = UART_OPEN (Board_UART0、uartParams); if (UART == NULL){ System_abort ("打开 UART 时出错"); } UART_WRITE (UART、echoPrompt、sizeof (echoPrompt)); /*循环永久回显*/ while (1){ UART_WRITE (UART、echoPrompt、sizeof (echoPrompt)); Task_sleep( unsigned int)arg0; } } int main (void) { /*呼叫板初始化函数*/ Board_initGeneral(); Board_initGPIO(); Board_initUART(); Task_Params taskParams; Task_Params_init (&taskParams); taskParams.arg0 = 1000; taskParams.STACKSIZE = TASKSTACKSIZE; taskParams.stack =任务0Stack (&T); Task_construct(&task0Struct,(Task_FuncPtr) uartFxn、&taskParams、NULL); /*启动 BIOS */ BIOS_start(); 返回(0); }
当我移除 const UARTUSCIA_BAUDRAateConfig uartUSCIA波特 率[]
{ .outputBudrate = 115200、 .inputClockFreq = 8192000、 .prescalar = 4、 hwRegUCBRFx = 7、 hwRegUCBRSx=0、 过采样= 1. }、
我找到 UART_open() 返回 ERR。 我不知道为什么?
同样、当我将 MCLK 配置为24MHZ 时、我必须将 cpufrq 配置为.CFG 文件中32768的倍数才能在 UART 9600波特率下工作。 有人解释原因?
/*========================= 内核(SYS/BIOS)配置=================== *
VAR BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.sertsEnabled = false;
BIOS.heapSize = 512;
BIOS.includeXdcRuntime = false;
BIOS.libType = BIOS.LibType_Custom;
BIOS.runtimeCreatesEnabled = true;
BIOS.logsEnabled = false;
bios.cpufreq.hi = 0;
bios.cpufreq.lo = 23986176;//32768*732
谢谢!