This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CC2745R10-Q1:计时器线程

Guru**** 2650475 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1591785/cc2745r10-q1-timers-thread

器件型号: 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(&params);
     params.hwiCallbackFxn = timerCallback;
 
     // Open driver
     lgptHandle = LGPTimerLPF3_open(0, &params);
 
     // 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(&params_1);
     params_1.hwiCallbackFxn = timerCallback2;
 
     // Open driver
     lgptHandle_1 = LGPTimerLPF3_open(CONFIG_LGPTIMER_1, &params_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);

   }

请提供指南以完成