共2条
1/1 1 跳转至页
CSPY 请问:我在CSPY中调试串口通信的时候,在接收中断子程序入口处我设了一个中断,结果却出了问题?请问为什么

问
我在CSPY中调试串口通信的时候,在接收中断子程序入口处我设了一个断点,然后从上位机发送数据,可为什么在断点处不中断呢,
答 1:
能看看你的代码?
答 2:
interrupt[UART0RX_VECTOR] void usart0_rx(void)
{
uchar i,j;
ADC12IE=0x00;
IFG1|=URXIFG0;
if((URXIFG0&IFG1)!=0)
{
if(RXBUF0==0xeb) //向上位机发送采集数据(BCD码方式从高位到低位传送)
{
for(i=0;i<BITS;i++)
{
TXBUF0=uart_data[BITS-i-1];
while((UTCTL0&TXEPT)==0);
}
}
//接受上位机发送的RATE
if(RXBUF0==0xff)
{
for(j=0;j<6;j++)
{
Rx_Data[i]=RXBUF0;
Rx_Buffer[j]=Rx_Data[j]; //复制接收数据
}
rate=Rx_Buffer[0]*1000+Rx_Buffer[1]*100+Rx_Buffer[2] *10+Rx_Buffer[3]+Rx_Buffer[4]/10+Rx_Buffer[5]/100;
}
if(RXBUF0==0xb2)
{
for(i=0;i<RAM_index;i++)
{
TXBUF0=*(piRAM+i);
while((UTCTL0&TXEPT)==0);
}
}
}
IFG1&=~URXIFG0;
ADC12IE=0x08;
} 答 3: 是否进中断和中断服务程序没有关系啊。
还是用例程(uart)先测试您的硬件是否完好。剩下的就好做了。 答 4: 硬件出问题的可能性比较小吧,因为有时可以进入中断,有时就会出现问题 答 5: 比较简单的测试方法是用下面的程序,上位机可以随便找个串口精灵什么的不断向下发送数据,如果能得到正确的返回数据就可以了。
#include <MSP430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCTL0 = CHAR; // 8-bit character
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
_EINT(); // Enable interrupts
// Mainloop
for (;;)
{
_BIS_SR(LPM3_bits); // Wait in LPM3 until character RXed
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
}
// UART0 RX ISR will for exit from LPM3 in Mainloop
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
} 答 6: 我再查查,谢谢刘工
{
uchar i,j;
ADC12IE=0x00;
IFG1|=URXIFG0;
if((URXIFG0&IFG1)!=0)
{
if(RXBUF0==0xeb) //向上位机发送采集数据(BCD码方式从高位到低位传送)
{
for(i=0;i<BITS;i++)
{
TXBUF0=uart_data[BITS-i-1];
while((UTCTL0&TXEPT)==0);
}
}
//接受上位机发送的RATE
if(RXBUF0==0xff)
{
for(j=0;j<6;j++)
{
Rx_Data[i]=RXBUF0;
Rx_Buffer[j]=Rx_Data[j]; //复制接收数据
}
rate=Rx_Buffer[0]*1000+Rx_Buffer[1]*100+Rx_Buffer[2] *10+Rx_Buffer[3]+Rx_Buffer[4]/10+Rx_Buffer[5]/100;
}
if(RXBUF0==0xb2)
{
for(i=0;i<RAM_index;i++)
{
TXBUF0=*(piRAM+i);
while((UTCTL0&TXEPT)==0);
}
}
}
IFG1&=~URXIFG0;
ADC12IE=0x08;
} 答 3: 是否进中断和中断服务程序没有关系啊。
还是用例程(uart)先测试您的硬件是否完好。剩下的就好做了。 答 4: 硬件出问题的可能性比较小吧,因为有时可以进入中断,有时就会出现问题 答 5: 比较简单的测试方法是用下面的程序,上位机可以随便找个串口精灵什么的不断向下发送数据,如果能得到正确的返回数据就可以了。
#include <MSP430x14x.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
UCTL0 = CHAR; // 8-bit character
UTCTL0 = SSEL0; // UCLK = ACLK
UBR00 = 0x0D; // 32k/2400 - 13.65
UBR10 = 0x00; //
UMCTL0 = 0x6B; // Modulation
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
P3DIR |= 0x10; // P3.4 output direction
_EINT(); // Enable interrupts
// Mainloop
for (;;)
{
_BIS_SR(LPM3_bits); // Wait in LPM3 until character RXed
while ((IFG1 & UTXIFG0) == 0); // USART0 TX buffer ready?
TXBUF0 = RXBUF0; // RXBUF0 to TXBUF0
}
}
// UART0 RX ISR will for exit from LPM3 in Mainloop
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
} 答 6: 我再查查,谢谢刘工
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
电流检测模块MAX4080S被打赏10分 | |
【我踩过的那些坑】calloc和malloc错误使用导致跑飞问题排查被打赏50分 | |
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 |