咨詢CH563L的PARA的問題

有幾個問題需要咨詢一下:

1?外部總線配置寄存器(R8_XBUS_CONFIG)的RB_XBUS_EN_32BIT為1,表示使用16位或32位的數(shù)據(jù)總線。哪么,使用16位數(shù)據(jù)總線時,D15~D0作為數(shù)據(jù)總線使用,D31~D16是否也會受到影響不能作為普通IO呢?

2? 以下是CH563EVT的例程HOST.C中的函數(shù),能否解釋一下其中的循環(huán)目的是什么,會受到什么效果;而且,我覺得代碼中的PRINT( "setup clk=1:\n" );及PRINT( "setup clk=2:\n" );之后的代碼沒有看出clk=1和clk=2的區(qū)別,能否解答一下?


void XbusTest( void )

{

? ? UINT8? ?mFstDat, mTstDat;

? ? UINT8? ?mHoldClk;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/* hold clk */

? ? UINT32? ? i, j;


? ? PRINT( "Xbus Test\n" );

? ? R32_PA_DIR = (1<<21)|( 1<<20 )|0x7FFF;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 置地址、WR、RD信號輸出 */?

? ? mFstDat = 0x55;

? ? PRINT( "setup clk=1:\n" );

? ? for( mHoldClk = 0; mHoldClk <= RB_XBUS_HOLD; mHoldClk ++ ){

? ? ? ? R8_SAFE_ACCESS_SIG = 0x57;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* unlock step 1 */

? ? ? ? R8_SAFE_ACCESS_SIG = 0xA8;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* unlock step 2 */?


? ? ? ? R8_XBUS_CONFIG = RB_XBUS_ENABLE | RB_XBUS_ADDR_OE;? ? ? ? ? ? ? ? ? ? ? /* 外部總線使能 */?

? ? ? ? R8_XBUS_SETUP_HOLD = mHoldClk;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 1 setup clocks */?


? ? ? ? R8_SAFE_ACCESS_SIG = 0x00;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* lock, to prevent unexpected writing */


? ? ? ? j = 1024 * 32;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部32K RAM */?

? ? ? ? pXbusPt = ( PUINT8V )0x00C00000;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部總線基址 */?

? ? ? ? mTstDat = mFstDat;


? ? ? ? PRINT( "? ? mHoldClk=0x%x, FstDat=0x%x\n", ( UINT16 )mHoldClk, ( UINT16 )mFstDat );

? ? ? ? PRINT( "? ? ? ? write: " );

? ? ? ? for( i = 0; i < j; i ++ ){

? ? ? ? ? ? if( i < 16 ) PRINT( "%x ",( UINT16 )mTstDat );? ? ? ? ? ? ? ? ? ? ? /* 顯示前16個數(shù)據(jù) */?

? ? ? ? ? ? *pXbusPt = mTstDat;

? ? ? ? ? ? pXbusPt ++;

? ? ? ? ? ? mTstDat ^= 0xFF;

? ? ? ? }

? ? ? ? PRINT( "\n" );

? ? ? ? PRINT( "? ? ? ? read:? " );

? ? ? ? pXbusPt = ( PUINT8V )0x00C00000;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部總線基址 */?

? ? ? ? mTstDat = mFstDat;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 測試首數(shù)據(jù) */

? ? ? ? for( i = 0; i < j; i ++ ){

? ? ? ? ? ? if( i < 16 ) PRINT( "%x? ", ( UINT16 )*pXbusPt );

? ? ? ? ? ? if( *pXbusPt != mTstDat ){

? ? ? ? ? ? ? ? PRINT( "? ? ? ? err: i=0x%lX, mTstDat=%x\n", ( UINT32 )i, ( UINT16 )mTstDat );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? ? ? pXbusPt ++;

? ? ? ? ? ? mTstDat ^= 0xFF;

? ? ? ? }

? ? ? ? PRINT( "\n? ? ? ? over\n" );

? ? ? ? mFstDat ^= 0xFF;

? ? }

? ? PRINT( "setup clk=2:\n" );

? ? for( mHoldClk = 0; mHoldClk <= RB_XBUS_HOLD; mHoldClk ++ ){

? ? ? ? R8_SAFE_ACCESS_SIG = 0x57;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* unlock step 1 */?

? ? ? ? R8_SAFE_ACCESS_SIG = 0xA8;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* unlock step 2 */


? ? ? ? R8_XBUS_CONFIG = RB_XBUS_ENABLE | RB_XBUS_ADDR_OE;? ? ? ? ? ? ? ? ? ? ? /* 外部總線使能 */

? ? ? ? R8_XBUS_SETUP_HOLD = mHoldClk;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 1 setup clocks */?


? ? ? ? R8_SAFE_ACCESS_SIG = 0x00;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* lock, to prevent unexpected writing */


? ? ? ? j = 1024 * 32;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部32K RAM */

? ? ? ? pXbusPt = ( PUINT8V )0x00C00000;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部總線基址 */?

? ? ? ? mTstDat = mFstDat;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 測試首數(shù)據(jù) */?

? ? ? ? PRINT( "? ? mHoldClk=0x%x, FstDat=0x%x\n", ( UINT16 )mHoldClk, ( UINT16 )mFstDat );

? ? ? ? PRINT( "? ? ? ? write: " );

? ? ? ? for( i = 0; i < j; i ++ ){

? ? ? ? ? ? if( i < 16 ) PRINT( "%x ",( UINT16 )mTstDat );? ? ? ? ? ? ? ? ? ? ? /* 顯示前16個數(shù)據(jù) */?

? ? ? ? ? ? *pXbusPt = mTstDat;

? ? ? ? ? ? pXbusPt ++;

? ? ? ? ? ? mTstDat ^= 0xFF;

? ? ? ? }

? ? ? ? PRINT( "\n" );

? ? ? ? PRINT( "? ? ? ? read:? " );

? ? ? ? pXbusPt = ( PUINT8V )0x00C00000;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 外部總線基址 */?

? ? ? ? mTstDat = mFstDat;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* 測試首數(shù)據(jù) */?

? ? ? ? for( i = 0; i < j; i ++ ){

? ? ? ? ? ? if( i < 16 ) PRINT( "%x? ", ( UINT16 )*pXbusPt );

? ? ? ? ? ? if( *pXbusPt != mTstDat ){

? ? ? ? ? ? ? ? PRINT( "? ? ? ? err: i=0x%lX, mTstDat=%x\n", ( UINT32 )i, ( UINT16 )mTstDat );

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? ? ? pXbusPt ++;

? ? ? ? ? ? mTstDat ^= 0xFF;

? ? ? ? }

? ? ? ? PRINT( "\n? ? ? ? over\n" );

? ? ? ? mFstDat ^= 0xFF;

? ? }

}


1,可以作為普通的GPIO使用

2這些代碼,應(yīng)該是測試的讀寫的 數(shù)據(jù)周期和保持時間,兩個代碼沒有區(qū)別,

但是如果在調(diào)用前給 R8_XBUS_CYCLE 不同的初始值,表現(xiàn)就會不同

具體你可以參見官網(wǎng)最新的手冊,CH563DS1( V1.1 ) P58/P59:

image.png

image.png


單片機(jī)無法通過寄存器的設(shè)置識別要寫入的是16位數(shù)據(jù)還是32位數(shù)據(jù),如果在使用16位數(shù)據(jù)線的情況下,發(fā)出寫16位數(shù)據(jù)指令的時候,這時低16位為有效數(shù)據(jù),高16位為零,此刻D16~D31會輸出0吧,如果是這樣的情況,就可能干擾了作為輸出IO的D16~D31,所以說當(dāng)做IO使用會存在問題吧。


你好,我們實(shí)測使用低16位主動并口高16位可以作為普通IO使用。


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频