请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: CC2745R10-Q1
我正在使用带有基本 BLE 代码的 CC2745 控制器、此处需要保留两个不同的计时器。
一个为 1ms、另一个为 10ms。 我已配置两个计时器的信息如下
#define CONFIG_LGPTIMER_COUNT 2
/*
* ======== LGPTimerLPF3_objects ========
*/
LGPTimerLPF3_Object LGPTimerLPF3_objects[CONFIG_LGPTIMER_COUNT];
/*
* ======== LGPTimerLPF3_hwAttrs ========
*/
static const LGPTimerLPF3_HWAttrs LGPTimerLPF3_hwAttrs[CONFIG_LGPTIMER_COUNT] = {
{
.baseAddr = LGPT0_BASE,
.intNum = INT_LGPT0_COMB,
.intPriority = 0x90,
.powerID = PowerLPF3_PERIPH_LGPT0,
.channelConfig[0] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
.channelConfig[1] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
.channelConfig[2] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
},
{
.baseAddr = LGPT1_BASE,
.intNum = INT_LGPT1_COMB,
.intPriority = 0x70,
.powerID = PowerLPF3_PERIPH_LGPT1,
.channelConfig[0] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
.channelConfig[1] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
.channelConfig[2] = {
.pin = GPIO_INVALID_INDEX,
.pinMux = GPIO_MUX_GPIO_INTERNAL,
.nPin = GPIO_INVALID_INDEX,
.nPinMux = GPIO_MUX_GPIO_INTERNAL,
},
},
};
/*
* ======== LGPTimer_config ========
*/
const LGPTimerLPF3_Config LGPTimerLPF3_config[CONFIG_LGPTIMER_COUNT] = {
{ /* CONFIG_LGPTIMER_2 */
.object = &LGPTimerLPF3_objects[CONFIG_LGPTIMER_2],
.hwAttrs = &LGPTimerLPF3_hwAttrs[CONFIG_LGPTIMER_2]
},
{ /* CONFIG_LGPTIMER_1 */
.object = &LGPTimerLPF3_objects[CONFIG_LGPTIMER_1],
.hwAttrs = &LGPTimerLPF3_hwAttrs[CONFIG_LGPTIMER_1]
},
};
const uint_least8_t CONFIG_LGPTIMER_2_CONST = CONFIG_LGPTIMER_2;
const uint_least8_t CONFIG_LGPTIMER_1_CONST = CONFIG_LGPTIMER_1;
const uint_least8_t LGPTimerLPF3_count = CONFIG_LGPTIMER_COUNT;
在这里我没有得到启动计时器的步骤
此外、我尝试不使用配置、一个计时器可以工作、但下一个计时器无法工作
void timerCallback(LGPTimerLPF3_Handle lgptHandle, LGPTimerLPF3_IntMask interruptMask) {
// interrupt callback code goes here. Minimize processing in interrupt.
Count_1ms++;
if (Count_1ms>10){
Count_1ms=0;
}
void taskFxn(void* arg0) {
LGPTimerLPF3_Handle lgptHandle;
LGPTimerLPF3_Params params;
uint32_t counterTarget;
// Initialize parameters and assign callback function to be used
LGPTimerLPF3_Params_init(¶ms);
params.hwiCallbackFxn = timerCallback;
// Open driver
lgptHandle = LGPTimerLPF3_open(0, ¶ms);
// Set counter target
counterTarget = 48000 - 1; // 1 ms with a system clock of 48 MHz
LGPTimerLPF3_setInitialCounterTarget(lgptHandle, counterTarget, true);
// Enable counter target interrupt
LGPTimerLPF3_enableInterrupt(lgptHandle, LGPTimerLPF3_INT_TGT);
// Start counter in count-up-periodic mode
LGPTimerLPF3_start(lgptHandle, LGPTimerLPF3_CTL_MODE_UP_PER);
// Generate counter target interrupt every 1 ms forever
while(1);
}
void timerCallback2(LGPTimerLPF3_Handle lgptHandle_1, LGPTimerLPF3_IntMask interruptMask) {
// interrupt callback code goes here. Minimize processing in interrupt.
Count_10ms++;
if (Count_10ms >100){
Sec_count++;
Count_10ms=0;
}
}
void taskFxn2(void* arg0) {
LGPTimerLPF3_Handle lgptHandle_1;
LGPTimerLPF3_Params params_1;
uint32_t counterTarget;
// Initialize parameters and assign callback function to be used
LGPTimerLPF3_Params_init(¶ms_1);
params_1.hwiCallbackFxn = timerCallback2;
// Open driver
lgptHandle_1 = LGPTimerLPF3_open(CONFIG_LGPTIMER_1, ¶ms_1);
// Set counter target
counterTarget = 4800 - 1; // 10 ms with a system clock of 48 MHz
LGPTimerLPF3_setInitialCounterTarget(lgptHandle_1, counterTarget, true);
// Enable counter target interrupt
LGPTimerLPF3_enableInterrupt(lgptHandle_1, LGPTimerLPF3_INT_TGT);
// Start counter in count-up-periodic mode
LGPTimerLPF3_start(lgptHandle_1, LGPTimerLPF3_CTL_MODE_UP_PER);
}
请提供指南以完成