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.
工具/软件:Code Composer Studio
您好!
我遇到了一个小问题、
我无法找到解决方案。
我使用的是 MSP430F4152。
在微控制器中、我使用 Rx 中断(我将数据从 PC 接收到微控制器)、
然后我使用计时器中断、
通过计时器中断、我将数据从微控制器传输到 PC。
我的计划在:
//unsigned int old; char old; #pragma vector=BASICTIMER_vector __interrupt void basic_timer_ISR (void) { putchar (旧); LPM3_EXIT; } #pragma vector=USCIAB0RX_vector __interrupt void USCIA0RX_ISR (void) { OLD = UCA0RXBUF; // putchar (old); // LPM3_exit; } int main (void) { unsigned int i; WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器 /../../--------------- FLL_CTL0 |= XCAP11PF; //配置负载电容器 BTCTL =(BTIP2+BTIP0); //2毫秒 IE2 |= BTIE; lcd_init(); UART_INIT(); while (1) { LCD[0]= digit[1]; //*/========================================================= _bis_SR_register (LPM3_bits+GIE); } //返回0; } 问题: 我要从 PC 接收52 (任意2位值),从 PC 接收到微控制器, 并通过传输功能将值发送到 PC。 1)接收数据后,如果我在 Rx 中断中发送:实际值正在发送(EX:52), 2)但如果我通过 Rx 中断接收数据,并使用计时器中断发送:只有一个数字在发送(EX:我接收52,但只发送'2') (这不会在一位数字值中发生:我收到的值..... 是发送的准确值) 我想同时使用"Rx 中断和计时器中断"。
(我还使用了"int"类型)
您能告诉我如何解决这个问题吗?
谢谢,
Srijit。
根据您的描述、您的 PC 似乎在基本计时器窗口内连续发送两个字节(2ms、如果 ACLK 故障转移到 VLOCLK、可能为6ms)。 在这种情况下、第二个 Rx 字节将在第一个字节被发送之前覆盖"OLD"。 这可能是发生的情况吗?
在一般情况下、您可能应该有一个循环缓冲器来处理此问题。 如果您知道您的事务始终是2个字节、则可能会使用一种更简单的机制。
您好!
非常感谢您的回复。
1)你说“循环缓冲器” :你能解释一下,如何做到?
2) 2)如果我只想占用2个字节、那么您也可以告诉我逻辑(代码...如果可能)。
此致、
Srijit
我认为 Google 将比我更好地解释循环缓冲器(更恰当的"循环队列")。