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.

[参考译文] MSP430F5510:使用计时器 B0 中断

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1640233/msp430f5510-using-timer-b0-interrupts

部件号: MSP430F5510

我已经使用了计时器 A0、A1 和 A2、需要另一个计时器、因此假设我可以使用下面新添加的代码来使用剩余的 B0:

void TI_UART_RX_TimeoutTimer_Init( void )
{
    // Configure Timer Trigger TB.0 
    TB0CCR0 = 200;

    TB0CCTL0 = CCIE;    // Enable Timer interrupt
    TB0CTL = TBSSEL__ACLK + MC__STOP | TBCLR;   // ACLK, stopped
    TI_UART_RX_TIMEOUT_START();		//start timer
}

#pragma vector=TIMER0_B0_VECTOR
__interrupt void TIMER_B0_ISR(void)
{
	TI_UART_RX_TIMEOUT_STOP();
	TB0R = 0;
}
  
构建此代码时、我假设所有构建错误都将由#pragma 行触发,它们会执行但操作有点奇怪 — 我收到了引用 UART int 矢量#59 的这个逻辑错误、此错误到目前为止一直很好:
image.png
 
我想我的问题是、如果我使用的逻辑“#pragma “行导致这样奇数的问题、如何为 TimerB0 声明 ISR?
 
谢谢
 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    矢量 59 不适用于任何 UART。

    #define USCI_B0_VECTOR          (56)                     /* 0xFFEE USCI B0 Receive/Transmit */
    #define USCI_A0_VECTOR          (57)                     /* 0xFFF0 USCI A0 Receive/Transmit */
    #define WDT_VECTOR              (58)                     /* 0xFFF2 Watchdog Timer */
    #define TIMER0_B1_VECTOR        (59)                     /* 0xFFF4 Timer0_B7 CC1-6, TB */
    #define TIMER0_B0_VECTOR        (60)                     /* 0xFFF6 Timer0_B7 CC0 */
    #define COMP_B_VECTOR           (61)                     /* 0xFFF8 Comparator B */
    

    仔细检查一下 UART 代码。

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

    uart.c 代码尝试使用 Timer0_B 来为字节到达之间的间隙计时、但在 uart.c 中声明 TIMER0_B0_vector 会导致这种加密的构建错误。  

    根据您的回复、TIMER0_B0_VECTOR 应该始终使用矢量#60、因此这会使事情更加困惑!

    FYI 此代码库使用 TI 的 USB 堆栈、我想知道 timer0/B 是否已秘密使用?

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

    错误消息非常清楚地说明这是在两个位置定义的。 进入 TI_USBKBD_MAIN.OBG 中、然后在此处再次访问。 其中一个。

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

    我想我发现了问题...我怀疑 USB 堆栈使用 TIMER_B 秘密进行、但由于这不是工程的一部分、因此 CCS 无法“在文件中查找“、因此我自己认为它可供使用。

    在 USB 堆栈中摆脱这是有风险的,因为我不明白这个堆栈是如何工作的足够好,一团糟!  

    我利用权变措施、重新利用现有的 Timer_A 来执行任务。