请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430FR2355 您好...
我不知道如何问这个问题,因为我试图为 MSP 计时器制作 HAL 库,但这里是…
我有一个与寄存器集一起定义的定时器的基址:
typedef struct
{
__vo uint16_t TB_CTL; /*Timer control register Offset 0x00 */
__vo uint16_t TB_CCLT0; /*Timer capture/compare control 0 register Offset 0x02 */
__vo uint16_t TB_CCLT1; /*Timer capture/compare control 1 register Offset 0x04 */
__vo uint16_t TB_CCLT2; /*Timer capture/compare control 2 register Offset 0x06 */
__vo uint16_t TB_CCLT3; /*Timer capture/compare control 3 register Offset 0x08 */
__vo uint16_t TB_CCLT4; /*Timer capture/compare control 4 register Offset 0x0A */
__vo uint16_t TB_CCLT5; /*Timer capture/compare control 5 register Offset 0x0C */
__vo uint16_t TB_CCLT6; /*Timer capture/compare control 6 register Offset 0x0E */
__vo uint16_t TB_R; /*Timer counter register Offset 0x10 */
__vo uint16_t TB_CCR0; /*Timer capture/compare 0 register Offset 0x12 */
__vo uint16_t TB_CCR1; /*Timer capture/compare 1 register Offset 0x14 */
__vo uint16_t TB_CCR2; /*Timer capture/compare 2 register Offset 0x16 */
__vo uint16_t TB_CCR3; /*Timer capture/compare 3 register Offset 0x18 */
__vo uint16_t TB_CCR4; /*Timer capture/compare 4 register Offset 0x1A */
__vo uint16_t TB_CCR5; /*Timer capture/compare 5 register Offset 0x1C */
__vo uint16_t TB_CCR6; /*Timer capture/compare 6 register Offset 0x1E */
__vo uint16_t TB_EX0; /*Timer expansion 0 Offset 0x20 */
uint16_t RSVD[6]; /*Reserved Offset 0x22-0x2C*/
__vo uint16_t TB_IV; /*Timer interrupt vector Offset 0x2E */
}Timer_RegDef_t;
#define TIMERB0 (Timer_RegDef_t *)TB0_BASE
#define TIMERB1 (Timer_RegDef_t *)TB1_BASE
#define TIMERB2 (Timer_RegDef_t *)TB2_BASE
#define TIMERB3 (Timer_RegDef_t *)TB3_BASE
我已为应用端定义了值类型输入以及句柄结构(请参阅下文):
typedef struct
{
uint8_t Timer_Clk; /*values @CLK */
uint8_t Timer_Divider; /*values @DIVIDER*/
uint8_t Timer_Size; /*values @SIZE*/
uint8_t Timer_CountMode; /*values @COUNT_MODE */
uint16_t Timer_Value; /*load value on counter */
uint8_t Timer_Clear; /*values @CLEAR */
uint8_t Timer_CC_Register; /*values @CAPTURE_CONTROL_REGISTER */
uint8_t Timer_CC_Control; /*values @CAPTURE_COMPARE_CONTROL */
uint16_t Timer_CC_Value; /*load value on capture compare */
uint8_t Timer_PWMValue; /*values @PWM_VALUE */
}Timer_Config_t;
typedef struct
{
Timer_RegDef_t *pTIMERx; /*holds base address of GPIO port to which pin belongs */
Timer_Config_t Timer_Config; /* holds timer settings */
}Timer_Handle_t;
我希望能够将一个值放置到所选的捕获比较寄存器中、并相应地修改捕获比较控制寄存器。 如果用户选择 CCR 寄存 器(Timer_CC_Register、值0 -6)、那么该值+偏移量0x12应该能够被添加到基址、并且这个寄存器应该被 Timer_CC_Value 更新。 我在下面的尝试不起作用。
(pTimerHandle->pTIMERx->TB_CTL + (0x12 + pTimerHandle->Timer_Config.Timer_CC_Register)) = \
pTimerHandle->Timer_Config.Timer_CC_Value;
我认识到这是错误的、但不理解将偏移量添加到基址以获取指向的新地址并使用 Timer_CC_Value 进行更新的方法...
有人能告诉我解决这个问题的最简单方法吗?
谢谢