測(cè)試P5.4默認(rèn)會(huì)輸出系統(tǒng)主頻的 12 分頻時(shí)鐘 Fsys/12,
會(huì)對(duì)外電路造成干擾,是否可以關(guān)閉?謝謝? ??
測(cè)試P5.4默認(rèn)會(huì)輸出系統(tǒng)主頻的 12 分頻時(shí)鐘 Fsys/12,
會(huì)對(duì)外電路造成干擾,是否可以關(guān)閉?謝謝? ??
串口UART1初始化函數(shù) CH559UART1Init 中會(huì)置位 XBUS_AUX |= ?bALE_CLK_EN; 導(dǎo)致時(shí)鐘輸出,是否可以關(guān)閉,而不影響UART1?
這里串口初始化的地方不需要打開(kāi)ALE輸出。ALE輸出只在使用外部總線(xiàn)的時(shí)候需要。
/*******************************************************************************
* Function Name? : CH559UART1Init(UINT8 DIV,UINT8 mode,UINT8 pin)
* Description? ? : CH559 UART1初始化設(shè)置
* Input? ? ? ? ? :?
? ? ? ? ? ? ? ? ? ?UINT8 DIV設(shè)置分頻系數(shù),時(shí)鐘頻率=Fsys/DIV,DIV不能為0
? ? ? ? ? ? ? ? ? ?UINT8 mode,模式選擇,1:普通串口模式;0:485模式
? ? ? ? ? ? ? ? ? ?UINT8 pin,串口引腳選擇;
? ? ? ? ? ? ? ? ? ?當(dāng)mode=1時(shí)
? ? ? ? ? ? ? ? ? ?0:RXD1=P4.0,TXD1關(guān)閉;
? ? ? ? ? ? ? ? ? ?1:RXD1&TXD1=P4.0&P4.4;
? ? ? ? ? ? ? ? ? ?2:RXD1&TXD1=P2.6&P2.7;
? ? ? ? ? ? ? ? ? ?3:RXD1&TXD1&TNOW=P2.6&P2.7&P2.5;
? ? ? ? ? ? ? ? ? ?當(dāng)mode=0時(shí)
? ? ? ? ? ? ? ? ? ?0:無(wú)意義
? ? ? ? ? ? ? ? ? ?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,寫(xiě)DLL、DLM和DIV寄存器
? ? SER1_DIV = DIV;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 預(yù)分頻
? ? 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波特率和時(shí)鐘
? ? if(mode == 1)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//關(guān)閉RS485模式 RS485_EN = 0,不能省略
? ? {
? ? ? XBUS_AUX |=? bALE_CLK_EN;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? }
? ? else if(mode == 0)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開(kāi)啟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模式只能使用半雙工模式? ??
? ? }
...
以上是你們?cè)瓘S(chǎng)的DEMO程序,注釋中有寫(xiě)到“不能省略”,我測(cè)試發(fā)現(xiàn)如果省略UART1就異常,麻煩確認(rèn)下
手冊(cè)中有描述UART1的模式受?bALE_CLK_EN、bXBUS_CS_OE、bXBUS_AL_OE、bUH1_DISABLE決定。所以也可以將bUH1_DISABLE置0來(lái)使能UART1工作在非485模式
已經(jīng)嘗試過(guò),當(dāng)前使用的是USB 的DEVICE模式,置位bUH1_DISABLE=0不起作用,
如果設(shè)置為HOST模式,可以bUH1_DISABLE清0,但是發(fā)現(xiàn)切回DEVICE模式后,該位又被置1
USB_CTRL寄存器中的bUC_HOST_MODE位控制的USB主從機(jī)模式會(huì)直接影響bUH1_DISABLE的狀態(tài),作為USB設(shè)備模式的時(shí)bUH1_DISABLE恒為1.
XBUS_AUX |=? bALE_CLK_EN;? ? ? ?這句話(huà)注釋掉,UART1通信不正常,而bUH1_DISABLE只能設(shè)置為1,最終的解決方法呢?如何關(guān)閉CLK輸出
根據(jù)RS485EN = 0這一條件,還可以將bXBUS_CS_OE置1,但是會(huì)導(dǎo)致P34被配置成XBUS的XCSO輸出,P55一直輸出XBUS的地址線(xiàn)波形。
總結(jié):UART1工作在普通TTL模式的3種配置方式:
1、不使用USB設(shè)備模式,將bUH1_DISABLE置0
2、bALE_CLK_EN置1,P54一直輸出1/12的系統(tǒng)時(shí)鐘
3、bXBUS_CS_OE置1,P34和P55處于被XBUS外設(shè)占用狀態(tài)
只能從3種條件中選一個(gè)用了。