主题:SysConfig 中讨论的其他器件
工具/软件:
大家好、我正尝试使用 GPTimer 实现边沿计数器。 我已经为 GPTimer3 实现了该代码、并验证了来自电路板上 AM64x 的 100kHz 方波应用于 DIO11。
DIO11 - AM64_TO_CC_IRQ
/**************************************************************************************** //**
\details 初始化发送计时器 — 在边沿计数模式下使用 GPTIMER
有关一般信息、请参阅 TRM 第 17.3.2.2 节
我们的设置:
1.在 65536 个计数匹配的向上计数器
2.计数器复位为零并在匹配时生成 IRQ
3. ISR 将对的高 16 位中的 16 位溢出进行计数
总共 32 位计时器计数
\return void
\retval 无
****************************************************************************************** /
静态 void TxTimerInitialize( void )
{
//TODO 添加计时器初始化包括匹配回调的设置
GPIO_setConfigAndMux (AM64_TO_CC_IRQ、GPIO_CFG_INPUT、GPT_PIN_3A);// AM64x IRQ 输入路由到 GPTimer3A 事件
GPTimerCC26XX_Params_init (&TxTimerParams);
TxTimerParams.mode = GPT_MODE_EDGE_COUNT;
TxTimerParams.direction = GPTimerCC26XX_Direction_up;
TxTimerParams.matchTiming = GPTimerCC26XX_SET_MATCH_NEXT_CLOCK;
TxTimerParams.width = GPT_CFG_16BIT_TIMER;
TxTimerHandle = GPTimerCC26XX_open (twoway_10US_COUNTER、&TxTimerParams);
if( TxTimerHandle !=空)
{
GPTimerCC26XX_setCaptureEdge (TxTimerHandle、GPTimerCC26XX_POS_EDGE)
GPTimerCC26XX_setMatchValue (TxTimerHandle、0x10000);//匹配 16 位翻转
GPTimerCC26XX_registerInterrupt (TxTimerHandle、TxTimerCallback、GPT_INT_CAPTURE_Match);
TxTimerInitialized = true;
}
TxTimerCount = 0x0uL;
// Power_setDependency (PowerCC26XX_XOSC_HF);//仍然需要?
}
/********************************************************************************************
目的:启动 10us 脉冲计数器以清除累积的计数
注释:
****************************************************************************************** /
int16_t TXTIMER_ResetSyncTimer (void)
{
int16_t Ex = TXTIMER_EX_OK;
if(!TxTimerInitialized )
{
TxTimerInitialize();
}
// GPTimerCC26XX_STOP (TxTimerHandle);
GPTimerCC26XX_setLoadValue (TxTimerHandle、0x0uL);
TxTimerCount = 0uL;
TxTimerEnabled = true;
GPTimerCC26XX_enableInterrupt (TxTimerHandle、GPT_INT_CAPTURE_match);
GPTimerCC26XX_START (TxTimerHandle);
退货(例如);
}
/**************************************************************************************** //**
\details 初始化发送计时器 — 在边沿计数模式下使用 GPTIMER
有关一般信息、请参阅 TRM 第 17.3.2.2 节
我们的设置:
1.在 65536 个计数匹配的向上计数器
2.计数器复位为零并在匹配时生成 IRQ
3. ISR 将对的高 16 位中的 16 位溢出进行计数
总共 32 位计时器计数
\return void
\retval 无
****************************************************************************************** /
静态 void TxTimerInitialize( void )
{
//TODO 添加计时器初始化包括匹配回调的设置
GPIO_setConfigAndMux (AM64_TO_CC_IRQ、GPIO_CFG_INPUT、GPT_PIN_3A);// AM64x IRQ 输入路由到 GPTimer3A 事件
GPTimerCC26XX_Params_init (&TxTimerParams);
TxTimerParams.mode = GPT_MODE_EDGE_COUNT;
TxTimerParams.direction = GPTimerCC26XX_Direction_up;
TxTimerParams.matchTiming = GPTimerCC26XX_SET_MATCH_NEXT_CLOCK;
TxTimerParams.width = GPT_CFG_16BIT_TIMER;
TxTimerHandle = GPTimerCC26XX_open (twoway_10US_COUNTER、&TxTimerParams);
if( TxTimerHandle !=空)
{
GPTimerCC26XX_setCaptureEdge (TxTimerHandle、GPTimerCC26XX_POS_EDGE)
GPTimerCC26XX_setMatchValue (TxTimerHandle、0x10000);//匹配 16 位翻转
GPTimerCC26XX_registerInterrupt (TxTimerHandle、TxTimerCallback、GPT_INT_CAPTURE_Match);
TxTimerInitialized = true;
}
TxTimerCount = 0x0uL;
// Power_setDependency (PowerCC26XX_XOSC_HF);//仍然需要?
}
/********************************************************************************************
目的:启动 10us 脉冲计数器以清除累积的计数
注释:
****************************************************************************************** /
int16_t TXTIMER_ResetSyncTimer (void)
{
int16_t Ex = TXTIMER_EX_OK;
if(!TxTimerInitialized )
{
TxTimerInitialize();
}
// GPTimerCC26XX_STOP (TxTimerHandle);
GPTimerCC26XX_setLoadValue (TxTimerHandle、0x0uL);
TxTimerCount = 0uL;
TxTimerEnabled = true;
GPTimerCC26XX_enableInterrupt (TxTimerHandle、GPT_INT_CAPTURE_match);
GPTimerCC26XX_START (TxTimerHandle);
退货(例如);
}
我在 ISR 中设置了一个断点、但从未看到中断。 几秒钟后我停止调试器、但我看不到计时器正在计数的证据。 我在论坛上看到了几个类似的例子、这些例子使我希望这可以起作用、但我必须错过一个步骤。
任何人都能看到我的实施存在问题吗?