完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
目前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(); } 求问如何解决这一问题? 真诚的谢谢您! |
|
相关推荐
1个回答
|
|
向量表地址偏移了吗?
|
|
|
|
只有小组成员才能发言,加入小组>>
3039个成员聚集在这个小组
加入小组2941 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3620 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2351 浏览 1 评论
4817 浏览 1 评论
2579 浏览 1 评论
1339浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3621浏览 2评论
2941浏览 1评论
1528浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 23:48 , Processed in 1.306061 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号