关于CH438Q 通讯问题


求助:初始化完成后中断引脚一直为低电平,读SSR寄存器为0xFF,读IIR寄存器也是0xFF。

初始化后寄存器配置如下:为写入后读出来的数据

IER: 00  IIR: 01  LCR: 00  MCR: 00  LSR: 60  MSR: 00  SCR: ab  FCR: 01

读写操作例程如下

void CH438WriteReg(unsigned char add,unsigned char data)

{

SetOutPut();

Writedata(add);

SET_CS_L();

SET_ALE_H();

Ddl_Delay1us(1);

SET_ALE_L();

Writedata(data);

SET_WR_L();

Ddl_Delay1us(1);

SET_WR_H();

SET_CS_H();

}


unsigned char CH438ReadReg(unsigned char addr) 

{

unsigned char value;

SetOutPut();

Writedata(addr);

SET_CS_L();

SET_ALE_H();

Ddl_Delay1us(1);

SET_ALE_L();

SetInPut();

SET_RD_L();

Ddl_Delay1us(1);

value = ReadData();

SET_RD_H();

SET_CS_H();

return value;

}


您好,您可以先判断一下芯片的接口通讯是否正常,先判断一下您使用的是直接地址还是服用地址,这个在硬件上您需要判断上电时候AMOD脚的电平状态。其次,可以去读写SCR寄存器判断时序是否正常。正常的话,读出即为写入的值。如果想要模拟时序例程,可以发送邮件到mj@wch.cn


SCR 寄存器写入跟读出是一样的,循环多次写都是如此,AMOD引脚上电后就拉高了


如果说读写SCR没问题的话,那您看一下您的寄存器配置是不是有问题,例如您给出的MCR寄存器的值是:00,但是MCR实际需要姜OUT2位置1才会有中断,您这个寄存器读出的值,明显都是不对的,您可以看一下您实际写入的参数。


我用你们发的例程也有同样的问题,复位后写配置 发现DLL 和 MCR 配置寄存器写进去与读出来的值不一样


您好,您可以确认这几点。

  1. 芯片的供电是否按照我们需求。

  2. 您读取的两个寄存器,一个DLL是寄存器,是需要再DLAB位为1时的才能读取DLL,否则读取的是RBR寄存器

  3. MCR寄存器本身的值会随着芯片的操作,会有变化。如果是指想判断接口通讯的话,可以通过多次读写SCR判断。


只有登录才能回复,可以选择微信账号登录