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.

[参考译文] MSP430F5529:可变问题

Guru**** 2589280 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1081433/msp430f5529-variable-issue

部件号:MSP430F5529
“线程:测试”中讨论的其它部件,

大家好,团队

客户提出的问题可能需要您的帮助:

使用 TIMER _A 时,TA0CCR0设置为9。 客户希望设置变量 n,并且每次计数器计数为9时,n 都会添加1。 如何设置? 请帮助解决此问题? 谢谢。

此致,

樱桃

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

    你好,Cherry,

    我为您提供了一个代码示例,供您参考: MSP430F55xx_ta0_02.c (TI.com)。

    您需要更改:

    1.更改 TA0CCR0=9

    2. 删除 代码“P1OUT ^= 0x01”,并在此处添加变量 n。  当 TIMER0_A0_中断时,n 增加1。

    祝你一切顺利

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

    你好,乔,

    感谢你的帮助!

    [引用 userid="495805" URL="~ë/support/microsofts/MSP-low-Power-microsoft-group/MSP430/f/MSP-low-Power-microcontroller-forum/1081433/msp430f5529-variable -issue/4002988#4002988"]在此处添加变量 n

    这里的 n 似乎不适用于主程序。  例如,如果中断程序使用 n++来计数,则预期计时器可以从 n 关闭到9,但测试发现,实际上总是有输出,而计时器 Awas 始终工作。

    以下是一位客户提出的类似问题: https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1081103/msp430f5529-how-to-turn-off-the-interrupt-of-timer-a

    他们要设计的是一个程序,该程序将闪存中存储的数据分配给阵列,然后在计时器中断时输出阵列值。 但由于数据太大,CCS 中定义的数组无法同时存储,因此当计时器将中断累积到一定次数时,他们希望将值返回到主程序, 使用此反馈值关闭中断重写阵列,然后重复输出过程。

    谢谢,此致,

    樱桃

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

    你好,Cherry,

    我在函数中定义 n:__interrupt void Timer_B (void),当 n 加9,P1.0=1时,我的程序将在此处运行。

    您可以更改 while (1)并在此处添加计时器输出。您可以尝试此操作,但我不确定它是否符合您的要求。

    此致

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

    你好,乔,

    谢谢。

    他们对这里同时使用的 timer_b 和 timer_a 感到困惑吗?   已使用 TIMER _A 来计数和输出。

    此外,我是否可以知道_interrupt void Timer_B (void)中断功能在哪里定义?

    谢谢,此致,

    樱桃

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

    你好,Cherry,

    以上代码只是一个示例,客户可以使用 TimerA,他们不需要 TimerB。

    当然 ,TimerA 和 TimerB 可以同时使用。

    msp430f5529.h 文件中定义的中断 void Timer_B (void)中断函数。

    您可以从以下代码中打开声明:#pragma vector = TIMER0_A0_vector,它将转到 msp430f5529.h

    祝你一切顺利

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

    你好,乔,

    再次感谢您的帮助!

    他们希望设计一个程序,将闪存中存储的数据分配给阵列,然后在计时器中断时输出阵列值。 但是,由于数据太大,他们在 CCS 中定义的数组似乎立即被解除收起,因此他们希望计时器计数 n,当 n=9时,主程序可以通过侦听此 n 值来关闭计时器。 重写阵列并打开计时器输出。 客户使用了易失性定义,现在发现内存中 n 的值可以累计,但由于主函数不循环显示 n 的值,即使子函数中 n 的值发生变化,主函数也无法重置输出数组。

    或者,CCS 是否有任何方法可以增加阵列的容量? 现在定义的无符号短 A[3000]阵列只能放置3000个数据,当数据变大时,它将报告错误。

    谢谢,此致,

    樱桃

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

    你好,Cherry,

    1.能否检查定义 n 的位置? 您需要将其定义为 全局变量(在主函数之外)。  

    2.在主函数中,您需要打开中断:_bis_sr_register(); 然后在此处添加您的函数(关闭计时器),最后 打开 LPM0。

    就像这样。 供参考

    祝你一切顺利

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

    你好,乔,

    如上所述,他们已经做了一些尝试,数组 m 的值在 n=9时被替换,但上述程序没有生效,检测到计数器仍在工作,数组 m 没有被替换。 主要功能和中断程序如下:

    谢谢,此致,

    樱桃

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

    > TA0CTL |=MC__STOP;

    这不会停止计时器(因为 MC__STOP ==0)。 请尝试:

    > TA0CTL &=~MC_3;  // MC=0停止计时器

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

    Bruce 您好,

    感谢你的帮助。 它仍然不起作用。

    客户的计划如下:

    定义了两个四位一维数组 m 和 M,其中每个中断触发器输出的 M0到 m3首先来自 m 数组,其中四个值已完成,客户希望停止中断并将 M 数组的值分配给 m 然后继续输出新的 M0至 m3。

    谢谢,此致,

    樱桃

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

    您好,

    我是否可以知道有任何更新?

    谢谢,此致,

    樱桃

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

    你好,Cherry,

    [引用 userid="496057" url="~/support/microsofts/MSP-low-Power-microsoft-group/MSP430/f/MSP-low-Power-microcontroller-forum/1081433/msp430f5529-variable -issue/4010034#4010034"]数组 m 的值在 n=9时被替换,但该程序仍无法运行,且该程序未被检测到,且未被检测到[计数器]

    那么数据 m[i]是否可以替换?   您可以添加 TA0CTL &=~MC_0,正如 Bruce 所说的,以查看计时器是否停止。

    目前我没有调试板,也许以后可以检查。

    祝你一切顺利  

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

    在 ISR 中,计时器中断被禁用,因此没有理由不能(立即)在“IF(k=4)”块中复制 M[]到 m[]。

    我应该指出,9是一个非常小的数字,需要输入 TA0CCR0 (使用 SMCLK 计时)。 ISR 在这段时间内无法完成,因此它将持续运行,并且永远不会返回到 main()。 此外,两位之间的时间间隔也不会保持不变。 数字9源自何处?

    您能描述整体目标吗? 从最初的问题来看,您似乎要将闪存块复制到 RAM 块,以便输出它。 是否有理由不能直接从 Flash 发送?

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

    乔和布鲁斯,你好,

    直接从闪存发送会导致 d=*p,然后输出 d 导致每个数据位的时间长度与最初设置的长度发生错误。 例如,如果输出为0.5 ms,闪存的读取和输出将约为0.67 ms。

    添加这句话 TA0CTL &=~MC_0,似乎计时器没有暂停。 您能否提供有关如何暂停中断的完整例程? 例如,当中断程序发生 n=100次时,会导致计时器 interrupt 暂停,直到 n 的值被清除。

    谢谢,此致,

    樱桃

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

    >TA0CTL &=~MC_0

    >>这不会停止计时器(因为 MC__STOP[=MC_0]=0)。 请尝试:

    >>TA0CTL &=~MC_3;//  MC=0停止计时器

    停止计时器将停止新的中断,直到采取其他一些操作(即计时器再次启动)。 从 ISR 返回后,可能会触发一个挂起的中断。 为防止出现这种情况,请添加:

    > TA0CCTL0 &=~CCIFG; //清除可能的挂起 CCR0中断