TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430f169进行IIC通信后通过串口与PC机通信问题

目前IIC通信的部分已调通,可获得从机发来的字节

想将收到的字节通过uart发送到PC机上,先进行uart初始化,串口发送结束后再进行IIC初始化,继续IIC通信

但提示出错,存在中断向量表冲突的问题,部分程序和错误如下:

//*************************************************************************
// 处理来自串口 0 的发送中断,预留
//*************************************************************************

#pragma vector=UART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{

}

#pragma vector=USART0TX_VECTOR //IIC中断向量,包括八个中断标志位
__interrupt void ISR_I2C(void)
{
switch (I2CIV) //中断向量寄存器,决定了IIC中具体哪个中断被出发
{ case I2CIV_AL:
{
//仲裁中断
break;
}
case I2CIV_NACK: //无应答信号中断
{
//NACK中断
P3OUT |=BIT2;
delay_ms(10);
P3OUT &=~BIT2;
break;
}
case I2CIV_OA: {
//自己地址中断
break;
}
case I2CIV_ARDY: {
//访问准备好中断
break;
}
case I2CIV_RXRDY: {
//接收准备好中断
I2CBuffer[0]=I2CDRB; break;
}
case I2CIV_TXRDY: {
//发送准备好中断
I2CDRB = I2CBuffer[tx_count];
tx_count = tx_count – 1;
if (tx_count < 0)
{
//禁止发送中断
I2CIE &= ~TXRDYIE; }
break;
} case I2CIV_GC: {
//一般调用中断
break;
}
case I2CIV_STT:
{

//起始条件中断
break;
}
}
}

对该部分提示:

Error[Be004]: function "ISR_I2C" has overlaid vector with function 

"UART0_TX_ISR" , second vector deleted

我的IIC和uart初始化程序如下:

/*************************************************************************
MSP430串口初始化
*************************************************************************/
void UART_Init()
{
U0CTL&=~I2C;
U0CTL&=~SYNC;
U0CTL|=SWRST + CHAR; //复位SWRST,8位数据模式
U0TCTL|=SSEL1; //SMCLK为串口时钟
U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N
U0BR0=baud_l; //N=UBR+(UxMCTL)/8
U0MCTL=0x00; //微调寄存器为0,波特率9600bps
ME1|=UTXE0; //UART0发送使能
ME1|=URXE0; //UART0接收使能
U0CTL&=~SWRST;
IE1|=URXIE0; //接收中断使能位
P3SEL|= BIT4 + BIT5; //设置IO口为第二功能模式,启用UART功能
P3DIR|= BIT4; //设置TXD0口方向为输出
}

/************************************************************************
串口0发送数据函数
*************************************************************************/

void Send_Byte(unsigned char data)
{
while((IFG1&UTXIFG0)==0); //发送寄存器空的时候发送数据
U0TXBUF=data;
}

/*——————————————————–
—I2C初始化函数
———————————————————-*/
void I2c_Init(void)
{
//将P3.1和P3.3设置为I2C管脚
//P3SEL |= 0X0A; //设置P3.1和P3.3管脚的方向
P3DIR |= 0x0A;
SDA_1;
SCL_1;
P3SEL |= 0X0A; //选择为I2C模式
U0CTL |= I2C + SYNC; //禁止I2C模块
U0CTL &= ~I2CEN; //设置I2C为7位地址模式,不使用DMA,
//字节模式,时钟源为SMCLK,
//设置成传输模式
I2CTCTL = I2CTRX + I2CSSEL_2; //定义从器件地址
I2CSA = SLAVEADDR; //设置本身的地址
I2COA = 0x01A5; //I2C时钟为SMCLK / 160
I2CPSC = 159; //SCL 高电平为:5 *I2C 时钟
I2CSCLH = 0x03; //SCL 低电平为:5 *I2C 时钟
I2CSCLL = 0x03; //I2C 模块有效
U0CTL |= I2CEN;
tx_count = 0;
rx_count = 0;

}

进行串口发送时主函数如下:

while(1)
{
ZT = ad5933_read(0x8f);

UART_Init();
_EINT();
Send_Byte(ZT);
delay_ms(10);

I2c_Init();

_EINT(); //打开中断
I2CWriteInit();
}

求问如何解决这一问题?

真诚的谢谢您!

Ling Zhu2:

Liyao Wang1

目前IIC通信的部分已调通,可获得从机发来的字节

想将收到的字节通过uart发送到PC机上,先进行uart初始化,串口发送结束后再进行IIC初始化,继续IIC通信

但提示出错,存在中断向量表冲突的问题,部分程序和错误如下:

//*************************************************************************// 处理来自串口 0 的发送中断,预留//*************************************************************************

#pragma vector=UART0TX_VECTOR__interrupt void UART0_TX_ISR(void){

}

#pragma vector=USART0TX_VECTOR //IIC中断向量,包括八个中断标志位__interrupt void ISR_I2C(void){ switch (I2CIV) //中断向量寄存器,决定了IIC中具体哪个中断被出发 { case I2CIV_AL: { //仲裁中断 break; } case I2CIV_NACK: //无应答信号中断 { //NACK中断 P3OUT |=BIT2; delay_ms(10); P3OUT &=~BIT2; break; } case I2CIV_OA: { //自己地址中断 break; } case I2CIV_ARDY: { //访问准备好中断 break; } case I2CIV_RXRDY: { //接收准备好中断 I2CBuffer[0]=I2CDRB; break; } case I2CIV_TXRDY: { //发送准备好中断 I2CDRB = I2CBuffer[tx_count]; tx_count = tx_count – 1; if (tx_count < 0) { //禁止发送中断 I2CIE &= ~TXRDYIE; } break; } case I2CIV_GC: { //一般调用中断 break; } case I2CIV_STT: {

//起始条件中断 break; } }}

对该部分提示:

Error[Be004]: function "ISR_I2C" has overlaid vector with function 

"UART0_TX_ISR" , second vector deleted

我的IIC和uart初始化程序如下:

/************************************************************************* MSP430串口初始化*************************************************************************/void UART_Init(){ U0CTL&=~I2C; U0CTL&=~SYNC; U0CTL|=SWRST + CHAR; //复位SWRST,8位数据模式 U0TCTL|=SSEL1; //SMCLK为串口时钟 U0BR1=baud_h; //BRCLK=8MHZ,Baud=BRCLK/N U0BR0=baud_l; //N=UBR+(UxMCTL)/8 U0MCTL=0x00; //微调寄存器为0,波特率9600bps ME1|=UTXE0; //UART0发送使能 ME1|=URXE0; //UART0接收使能 U0CTL&=~SWRST; IE1|=URXIE0; //接收中断使能位 P3SEL|= BIT4 + BIT5; //设置IO口为第二功能模式,启用UART功能 P3DIR|= BIT4; //设置TXD0口方向为输出}

/************************************************************************ 串口0发送数据函数*************************************************************************/

void Send_Byte(unsigned char data){ while((IFG1&UTXIFG0)==0); //发送寄存器空的时候发送数据 U0TXBUF=data;}

/*———————————————————–I2C初始化函数———————————————————-*/void I2c_Init(void){ //将P3.1和P3.3设置为I2C管脚 //P3SEL |= 0X0A; //设置P3.1和P3.3管脚的方向 P3DIR |= 0x0A; SDA_1; SCL_1; P3SEL |= 0X0A; //选择为I2C模式 U0CTL |= I2C + SYNC; //禁止I2C模块 U0CTL &= ~I2CEN; //设置I2C为7位地址模式,不使用DMA, //字节模式,时钟源为SMCLK, //设置成传输模式 I2CTCTL = I2CTRX + I2CSSEL_2; //定义从器件地址 I2CSA = SLAVEADDR; //设置本身的地址 I2COA = 0x01A5; //I2C时钟为SMCLK / 160 I2CPSC = 159; //SCL 高电平为:5 *I2C 时钟 I2CSCLH = 0x03; //SCL 低电平为:5 *I2C 时钟 I2CSCLL = 0x03; //I2C 模块有效 U0CTL |= I2CEN; tx_count = 0; rx_count = 0;

}

进行串口发送时主函数如下:

while(1) { ZT = ad5933_read(0x8f); UART_Init(); _EINT(); Send_Byte(ZT); delay_ms(10); I2c_Init();

_EINT(); //打开中断 I2CWriteInit(); }

求问如何解决这一问题?

真诚的谢谢您!

赞(0)
未经允许不得转载:TI中文支持网 » MSP430f169进行IIC通信后通过串口与PC机通信问题
分享到: 更多 (0)