開發(fā)板上設(shè)計了2個數(shù)碼管和8個LED指示燈。數(shù)碼管和LED復(fù)用數(shù)據(jù)總線,采用74HC245作為總線驅(qū)動芯片。CPLD內(nèi)部固化了一個LED控制器,控制器采用動態(tài)掃描的方式維持LED顯示。使用時ADSP-BF561處理器只需通過EBIU接口向CPLD內(nèi)部的LED控制器送入需要顯示的內(nèi)容,LED控制器會自動將所要顯示的數(shù)據(jù)鎖存,并通過掃描維持該數(shù)據(jù)的顯示,直到BF561重新向控制器送入數(shù)據(jù)信息。
LEDCS |
LED_A1 |
LED_A0 |
pLED_DAT_OUT |
說明 |
上升沿 |
0 |
0 |
XX |
數(shù)碼管0顯示數(shù)據(jù) |
上升沿 |
0 |
1 |
XX |
數(shù)碼管1顯示數(shù)據(jù) |
上升沿 |
1 |
0 |
XX |
LED顯示數(shù)據(jù) |
上升沿 |
1 |
1 |
保留 |
保留 |
其中pLED_DAT_OUT的數(shù)據(jù)D0-D7分別對應(yīng)的數(shù)碼管的8段a-h。
實驗時驅(qū)動代碼的編寫過程要按照以下步驟進行
第一:向pCtrOut_Flag_OE寄存器寫入數(shù)據(jù),使能驅(qū)動器HC245 LED_OE=0。
第二:選擇寫入地址向pCtrOut_Flag_B對應(yīng)的LED_A1和LED_A0寫入數(shù)據(jù)。
第三:向pLED_DAT_OUT寄存器寫入要顯示的參數(shù)。
第四:控制pCtrIner_Flag寄存器的LEDCS位,使其產(chǎn)生一個上升沿,此時數(shù)據(jù)寫入相應(yīng)的寄存器:
pCtrOut_Flag_OE映射的物理地址為:0x20350000
pCtrIner_Flag映射的物理地址為:0x20360000
pCtrOut_Flag_B映射的物理地址為:0x20380000
pLED_DAT_OUT映射的物理地址為:0x20390000
代碼分析:
void
leddisplay(uint8_t LEDNum,uint8_t data)
{
switch(LEDNum)
{
case 1: *pCtrOut_Flag_B
= 0x00; break; // LED_A1=0 LED_A1=0
case 2: *pCtrOut_Flag_B
= 0x00| LED_A0; break; // LED_A1=0 LED_A1=1
case 3: *pCtrOut_Flag_B
= 0x00| LED_A1; break; // LED_A1=1 LED_A1=1
default: printf("ERROR!\n"); break;
}
*pLED_DAT_OUT =data; // 輸出顯示數(shù)據(jù)
*pCtrIner_Flag_OE =0x00; // LEDCS 位為0
mdelay(10000);
*pCtrIner_Flag_OE =0x04; // LEDCS 位為1
}
代碼運行結(jié)果:
1.
首先看到8個LED燈循環(huán)被點亮。
2.
數(shù)碼管顯示從99遞減到00。
硬件連接原理圖: