CH559L 如何关闭P5.4脚时钟输出

测试P5.4默认会输出系统主频的 12 分频时钟 Fsys/12,

会对外电路造成干扰,是否可以关闭?谢谢    




串口UART1初始化函数 CH559UART1Init 中会置位 XBUS_AUX |=  bALE_CLK_EN; 导致时钟输出,是否可以关闭,而不影响UART1?


这里串口初始化的地方不需要打开ALE输出。ALE输出只在使用外部总线的时候需要。


/*******************************************************************************

* Function Name  : CH559UART1Init(UINT8 DIV,UINT8 mode,UINT8 pin)

* Description    : CH559 UART1初始化设置

* Input          : 

                   UINT8 DIV设置分频系数,时钟频率=Fsys/DIV,DIV不能为0

                   UINT8 mode,模式选择,1:普通串口模式;0:485模式

                   UINT8 pin,串口引脚选择;

                   当mode=1时

                   0:RXD1=P4.0,TXD1关闭;

                   1:RXD1&TXD1=P4.0&P4.4;

                   2:RXD1&TXD1=P2.6&P2.7;

                   3:RXD1&TXD1&TNOW=P2.6&P2.7&P2.5;

                   当mode=0时

                   0:无意义

                   1:P5.4&P5.5连接485,TNOW=P4.4;

                   2:P5.4&P5.5连接485;

                   3:P5.4&P5.5连接485,TNOW=P2.5;

* Output         : None

* Return         : None

*******************************************************************************/

void CH559UART1Init(UINT8 DIV,UINT8 mode,UINT8 pin)

{

    UINT32 x;

    UINT8 x2; 


    SER1_LCR |= bLCR_DLAB;                                                    // DLAB位置1,写DLL、DLM和DIV寄存器

    SER1_DIV = DIV;                                                           // 预分频

    x = 10 * FREQ_SYS *2 / DIV / 16 / CH559UART1_BPS;                             

    x2 = x % 10;

    x /= 10;

    if ( x2 >= 5 ) x ++;                                                      //四舍五入

    SER1_DLM = x>>8;

    SER1_DLL = x&0xff;

    SER1_LCR &= ~bLCR_DLAB;                                                   //DLAB位置0,防止修改UART1波特率和时钟

    if(mode == 1)                                                             //关闭RS485模式 RS485_EN = 0,不能省略

    {

      XBUS_AUX |=  bALE_CLK_EN;                                     

    }

    else if(mode == 0)                                                        //开启RS485模式 RS485_EN = 1;

    {

        UHUB1_CTRL |= bUH1_DISABLE;                                   

        PIN_FUNC &= ~bXBUS_CS_OE;

        PIN_FUNC |= bXBUS_AL_OE;

        XBUS_AUX &= ~bALE_CLK_EN;

        SER1_MCR |= bMCR_HALF;                                                //485模式只能使用半双工模式    

    }

...


以上是你们原厂的DEMO程序,注释中有写到“不能省略”,我测试发现如果省略UART1就异常,麻烦确认下


手册中有描述UART1的模式受 bALE_CLK_EN、bXBUS_CS_OE、bXBUS_AL_OE、bUH1_DISABLE决定。所以也可以将bUH1_DISABLE置0来使能UART1工作在非485模式

image.png


已经尝试过,当前使用的是USB 的DEVICE模式,置位bUH1_DISABLE=0不起作用,

如果设置为HOST模式,可以bUH1_DISABLE清0,但是发现切回DEVICE模式后,该位又被置1


USB_CTRL寄存器中的bUC_HOST_MODE位控制的USB主从机模式会直接影响bUH1_DISABLE的状态,作为USB设备模式的时bUH1_DISABLE恒为1.


XBUS_AUX |=  bALE_CLK_EN;       这句话注释掉,UART1通信不正常,而bUH1_DISABLE只能设置为1,最终的解决方法呢?如何关闭CLK输出


根据RS485EN = 0这一条件,还可以将bXBUS_CS_OE置1,但是会导致P34被配置成XBUS的XCSO输出,P55一直输出XBUS的地址线波形。

总结:UART1工作在普通TTL模式的3种配置方式:

1、不使用USB设备模式,将bUH1_DISABLE置0

2、bALE_CLK_EN置1,P54一直输出1/12的系统时钟

3、bXBUS_CS_OE置1,P34和P55处于被XBUS外设占用状态


只能从3种条件中选一个用了。


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