首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

求助mc9s12dg128的iic问题

求助mc9s12dg128的iic问题

使用mc9s12dg128的iic接口调试at24c01a,一个iic接口的eeprom


老是调不通,程序老死机。大家给看看是什么问题。。



#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"


void IIC_int()
{
  IBFD=0xfc;
  IBAD=0xee;
  IBCR|=0x80;
}


void IIC_Start()
{
  IBCR|=0x30;
}


void IIC_Stop()
{
  IBCR&=0xdf;    //stop
}


void uart_init(void)
{
  SCI1CR2=0x08;
  SCI1BDH=0x00;
  SCI1BDL=0x9C;
}


void uart_putchar(unsigned char ch)
{
 while(!(SCI1SR1&0x40))
  {}         
  SCI1DRL=ch;


uchar send_data(uchar ch)
{
  IBSR_IBIF=1;      //clear flag
  IBDR=ch;
  //while(!IBSR_IBB); //if the bus is busy
  while(!IBSR_IBIF);//wait for acknowledge
}


void wait_ack()
{
  while(IBSR_RXAK); //
}



void main(void) {
  /* put your own code here */
  EnableInterrupts;
  uart_init();
  IIC_int();
  while(IBSR_IBB);
  IIC_Start();
//write
  send_data(0xa0);
  wait_ack();
  send_data(0x02);
  wait_ack();
  send_data(0x78);
  wait_ack();
  IIC_Stop();    //stop
//read
  //IIC_int();
  IIC_Start();
  send_data(0xa0);
  wait_ack();
 
 
  send_data(0x02);
  wait_ack();
 
  IIC_Start();
  send_data(0xa1);
  wait_ack();
  //while(!IBSR_RXAK); //
  IBCR&=0xef;       //receive
  IBSR_IBIF=1;      //clear flag
  //uart_putchar(IBSR);
  while(!IBSR_IBIF);
  //uart_putchar(0xf0);
  //IBDR=0xff;
  uart_putchar(IBDR);
  IIC_Stop();    //stop
  IBSR_IBIF=1;      //clear flag
  for(;;) {} /* wait forever */
}

有没有找到程序到底停在哪里了?
海纳百川  有容乃大
在检查IBIF标志时停的
口线上是否有信号输出?
海纳百川  有容乃大
你是说要用示波器看看波形吗
程序单步执行可以执行完毕,但是全速执行就会在 while(!IBSR_IBIF);这一句停住
单步走时用示波器看的波形对否?
海纳百川  有容乃大
FCS网站上有没有例程啊。我看到的只是用I/O口模拟的阿
你可以用处理器专家PE自动生成代码作参考。
海纳百川  有容乃大
3.1版本的可以吗,没用过啊
应该可以的。
海纳百川  有容乃大
有关于使用PE的资料吗,从哪里可以找到
安装好CodeWarrior之后,在其子目录下有使用手册。另外,PE是图形化的界面,不用资料也可以使用的。
海纳百川  有容乃大
返回列表