打印

AW32的IIC总线 支持广地址(0x00)吗???

[复制链接]
1765|1
手机看帖
扫描二维码
随时随地手机跟帖
沙发
tarzar|  楼主 | 2008-2-24 23:32 | 只看该作者

AW32,不支持0x00广播地址!!!!

我试验过了,AW32,不支持0x00广播地址。

我从机的地址设成非零地址,主机用0x00怎么都找不到从机,但是把从机的地址也设成0x00,主机用0x00就能仿问到了,而且用0x00地址仿问从机即能写入,也能读出,就是0x00地址就被当成普通地址了。

程序如下:


void IIC_init(void)
{
    IIC1C = 0x00; //禁止IIC模块
    //IIC1F = 0x4A; //设成100K
    IIC1A = DEVICE_I2C_ADR;//设从机地址
    IIC1C = 0xC0;
    //IIC1C_IICEN = 1; //IIC模块使能
    //IIC1C_IICIE = 1; //中断使能
    //IIC1C_MST   = 0; //IIC模块设为从机
    //IIC1C_TXAK  = 0; //发送确认信号
}

interrupt VectorNumber_Viic1 void  IIC_ISR(void)
{
    unsigned char dat;
    unsigned char dummy_dat;
    
    IIC1S_IICIF = 1; //清除中断标志位
    
    if(IIC1C_MST == 0) //是设成从机吗?   不参与仲裁....
    {
        if(IIC1S_IAAS == 1) //从机地址匹配吗?
        {
            if(IIC1S_SRW == 1) //发送数据
            {
                IIC1C_TX = 1;
                IIC1D = Ram_Buff[Mem_Adr];
                Mem_Adr++; //地址累加
                return ;
            }
            else //否则接收数据
            {
                IIC1C_TX = 0;
                dummy_dat = IIC1D; //清除TCF
                Twi_State = TWI_MEM_ADR;
                return;
            }
        }
        else
        {
            //接收数据
            if(IIC1C_TX == 0)
            {
                                        
                    Mem_Adr++;           //地址自动加一
                    Mem_Write_Flag    = true;
                }
                return;
            }
            else
            {
                if(IIC1S_RXAK == 0) //收到应答
                {
                    IIC1D = Ram_Buff[Mem_Adr]; //发送下一字节
                    Mem_Adr++; //地址累加
                    return;
                }
                else
                {
                    IIC1C_TX = 0; //切换到接收模式
                    dummy_dat = IIC1D;
                    return;
                }
            }
        }
    }
    else  //设成主机吗?
    {
    }
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

81

帖子

2

粉丝