目前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();
}
求问如何解决这一问题?
真诚的谢谢您!