共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网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |