主题中讨论的其他器件:CC2650、TIMAC、 UNIFLASH、 CC2651R3、SYSBIOS
我正在使用 TIMAC (tirtos_simplelink_2_11_01_09)、并尝试编写一个可使一些 LED 闪烁的简单应用程序。 此程序在调试会话期间按预期工作、但当我断开电源并重新插入时、它将触发单个计时器事件、然后冻结。 如果我进入 Uniflash 并发出 CPU 或系统复位、则 LED 会按需闪烁。 如果我发出电路板复位命令、LED 永远不会亮起。 我是在 msa_cc2650示例应用程序中反向工作的、因此这里存在大量膨胀代码、但相关部分
Void main()
{
Task_Params taskParams;
// set RFC mode to support IEEE802.15.4
// Note: This must be done before the RF Core is released from reset!
SET_RFC_MODE( RFC_MODE_IEEE );
// enable iCache prefetching
VIMSConfigure(VIMS_BASE, TRUE, TRUE);
// Enable cache
VIMSModeSet( VIMS_BASE, VIMS_MODE_ENABLED );
/* Initialization for board related stuff such as LEDs
* following TI-RTOS convention */
PIN_init(BoardGpioInitTable);
// Configure task.
Task_Params_init(&taskParams);
taskParams.stack = myTaskStack;
taskParams.stackSize = MSA_TASK_STACK_SIZE;
taskParams.priority = 1;
Task_construct(&myTask, taskFxn, &taskParams, NULL);
BIOS_start(); /* enable interrupts and start SYS/BIOS */
}
/**************************************************************************************************
* GLOBAL VARIABLES
**************************************************************************************************/
/* Clock resorces */
static Clock_Params msaLed4Params;
static Clock_Struct msaLed4;
/** LED globals */
static PIN_Config ledPinTable[] = {
Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED1 initially off */
Board_LED2 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED2 initially off */
Board_LED3 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED2 initially off */
Board_LED4 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX, /* LED2 initially off */
PIN_TERMINATE /* Terminate list */
};
/* LED pin state */
static PIN_State ledPinState;
/* LED Pin Handle */
PIN_Handle ledPinHandle;
static void MSA_ClockFxn(UArg param)
{
static bool index = false;
PIN_setOutputValue(ledPinHandle, Board_LED1, index ? Board_LED_ON : Board_LED_OFF);
PIN_setOutputValue(ledPinHandle, Board_LED3, index ? Board_LED_ON : Board_LED_OFF);
PIN_setOutputValue(ledPinHandle, Board_LED2, index ? Board_LED_OFF : Board_LED_ON);
PIN_setOutputValue(ledPinHandle, Board_LED4, index ? Board_LED_OFF : Board_LED_ON);
index = !index;
}
static void MSA_Init(void)
{
UInt msaLed4Period = MSA_LED4_INITIAL_PERIOD * 1000 / Clock_tickPeriod;
ledPinHandle = PIN_open(&ledPinState, ledPinTable);
/* Initialize clock poll parameters */
Clock_Params_init(&msaLed4Params);
/* Create a periodic poll timer */
msaLed4Params.period = msaLed4Period;
msaLed4Params.startFlag = TRUE;
msaLed4Params.arg = (UArg)MSA_LED4_EVENT;
Clock_construct(&msaLed4, MSA_ClockFxn, msaLed4Period, &msaLed4Params);
}
void msa_task(void)
{
/* Initialize application */
MSA_Init();
/* No return from MSA process */
//MSA_Process();
}