打印

s3c44b0 IIC查询 ZLG7290键盘 求助

[复制链接]
1524|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wlecust06|  楼主 | 2008-4-8 22:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的程序如下 想读取ZLG7290键盘值 通过IIC但不用中断 不知道为什么读出来值 就是我设定的值OX71
不明白 请问下大家 如何通过 操作寄存器 产生ACK信号?? 发送 地址加读写位的时候 是把七位地址加读
写位一起 写到寄存器 rIICDS 后 它就自动发送吗? 谢谢各位指教!
void Iicinit7290(void)
{
    unsigned int i;
    static uint8 conreg;
    uchar iicstat;
    //0x1010 1111 0xaf
    rPCONF|=0xa;//PF0 IICSCL PF1 IISDA
    rPUPF|=0x3;//禁止内部上拉
    rIICCON=(1<<7)|(0<<6)|(0<<5)|(0<<4)|(0xf); //Enable interrupt, IICCLK=MCLK/16, Enable ACK
    Delay(1000);                                      //66Mhz/16/(15+1) = 257Khz
    Uart_Printf("read 7290 start  ");
    rIICADD=0x10;    // S3C44B0X slave address
    rIICSTAT=0x10;    //使能RX TX
    //开始设立地址
    rIICDS=0x70;  //ZLG7290 七位地址0x38+1位读0 0x70
    rIICSTAT=0xf0;//产生Start信号 主发送模式 主机发送地址完成后 置位IPF位
    loop1:
    iicstat= rIICSTAT;
    if(iicstat&0x01)
    goto loop1;//此循环 等待收到ACK信号
    rI_ISPC=BIT_IIC;

    // 发送数据
    rIICDS=ZLG7290_Key; 发送第要读ZLG7290的寄存器地址
    loop2:
    iicstat= rIICSTAT;
    if(iicstat&0x01)
    goto loop2;//    rI_ISPC=BIT_IIC;

    Delay(5);
    //延时后 产生RESTART信号
    //开始读7290 重新发送start信号  七位地址0x38+1位读1 0x71
    rIICDS=0x71;//0x38<<1+1
    rIICSTAT=0xb0;//再次产生Start信号,主机设为主接收模式,发送地址加读
    // rIICDS上数据在 START信号后自动传输

    loop3://等待收到ACK
    iicstat= rIICSTAT;
    if(iicstat&0x01)
    goto loop3; //发送完写地址后 等待接收键值
    rI_ISPC=BIT_IIC;
    Delay(1000);//等待收到数据
    rIICSTAT=0x9f;//停止信号发出
    i=rIICDS;

    Uart_Printf("key value is 0x%x ",i);
    Uart_Printf("Read test data from 7290 is over ");

相关帖子

沙发
wlecust06|  楼主 | 2008-4-9 12:17 | 只看该作者

怎么没人理

怎么没人顶啊 大家帮帮忙啊 谢谢了啊

使用特权

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

本版积分规则

12

主题

20

帖子

0

粉丝