版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 接口技術(shù) </b></p><p><b> 課程設(shè)計(jì)報(bào)告書</b></p><p><b> 專業(yè)班級 </b></p><p><b> 學(xué)生姓名 </b></p><p><b> 指導(dǎo)教師 <
2、/b></p><p><b> 日 期</b></p><p><b> 一、設(shè)計(jì)目的</b></p><p> 1.融會貫通教材各章的內(nèi)容,通過知識的綜合運(yùn)用,加深對基本接口芯片的工作原理及與CPU互連的認(rèn)識,以進(jìn)一步掌握常見接口的用法。</p><p> 2.學(xué)習(xí)設(shè)計(jì)和調(diào)試
3、嵌入式系統(tǒng)開發(fā)的基本步驟和方法,培養(yǎng)科學(xué)研究的獨(dú)立工作能力,取得工程設(shè)計(jì)和調(diào)試的實(shí)踐和經(jīng)驗(yàn)。</p><p><b> 二、設(shè)計(jì)環(huán)境</b></p><p> PC機(jī)一臺( Windows操作系統(tǒng)并安裝ADT2000),JXARM9-2410-1實(shí)驗(yàn)箱及配件一套。</p><p><b> 二、設(shè)計(jì)任務(wù)</b><
4、;/p><p> 1)時鐘顯示功能,能夠以十進(jìn)制顯示“時”、“分”、“秒”。</p><p> 2)具有調(diào)節(jié)時、分、秒的功能。</p><p> 3)整點(diǎn)自動報(bào)時,在整點(diǎn)時,便自動發(fā)出鳴叫聲,時長1s。</p><p><b> 三、設(shè)計(jì)內(nèi)容</b></p><p><b> 1.
5、硬件電路原理圖</b></p><p> 一個具有計(jì)時、調(diào)時、報(bào)時、顯示等基本功能的數(shù)字鐘主要由振蕩器、分頻器、計(jì)數(shù)器、譯碼器、顯示器、校時電路、報(bào)時電路等七部分組成。振蕩器產(chǎn)生的信號經(jīng)過分頻器得到秒脈沖,秒脈沖送入計(jì)數(shù)器計(jì)數(shù),計(jì)數(shù)結(jié)果通過“時”、“分”、“秒”譯碼器譯碼,并通過顯示器顯示時間。</p><p><b> 整體邏輯框圖如下:</b>&l
6、t;/p><p><b> 硬件電路圖如下:</b></p><p> 2.程序流程圖及代碼</p><p><b> 程序如下:</b></p><p> #include "def.h"</p><p> #include "2410l
7、ib.h"</p><p> #include "option.h"</p><p> #include "2410addr.h"</p><p> #include "interrupt.h"</p><p> unsigned char segtable[10]
8、 = { 0xc0, 0xf9, 0xa4, </p><p> 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, };</p><p> void Delay0(int time) {</p><p><b> int i;</b></p><p>
9、; int delayLoopCount=1000;</p><p> for(;time>0;time--);</p><p> for(i=0;i<delayLoopCount;i++);</p><p><b> }</b></p><p> int r_BCDHOUR ;</p>
10、<p> int r_BCDMIN ;</p><p> int r_BCDSEC ;</p><p> /* 表示日期、時間的數(shù)據(jù)結(jié)構(gòu)*/</p><p> typedef struct ST_DATE</p><p><b> {</b></p><p> short
11、 year; // 年</p><p> charmon; // 月</p><p> charday; // 日</p><p> charweek_day; // 星期</p><p> charhour; // 時</p><p> ch
12、armin; // 分</p><p> charsec; // 秒</p><p> } st_date;</p><p> int led_index = 0;</p><p> int ext0_count = 0;</p><p> void rtc_tick_isr(
13、void) __attribute__ ((interrupt("IRQ")));;</p><p> void rtc_int_isr(void) __attribute__ ((interrupt("IRQ")));;</p><p> void rtc_set_date(st_date* p_date)</p><p&g
14、t;<b> {</b></p><p> rRTCCON = 0x01;</p><p> rBCDYEAR = p_date->year;</p><p> rBCDMON = p_date->mon;</p><p> rBCDDAY = p_date->day;</p&g
15、t;<p> rBCDDATE = p_date->week_day;</p><p> rBCDHOUR = p_date->hour;</p><p> rBCDMIN = p_date->min;</p><p> rBCDSEC = p_date->sec;</p><p> rRT
16、CCON = 0x00;</p><p><b> }</b></p><p> void rtc_get_date(st_date* p_date)</p><p><b> {</b></p><p> rRTCCON = 0x01;</p><p>
17、p_date->year= rBCDYEAR ;</p><p> p_date->mon= rBCDMON ;</p><p> p_date->day= rBCDDAY ;</p><p> p_date->week_day= rBCDDATE ;</p><p> p_date-&g
18、t;hour= rBCDHOUR ;</p><p> p_date->min= rBCDMIN ;</p><p> p_date->sec= rBCDSEC ;</p><p> rRTCCON = 0x00;</p><p><b> }</b></p>&
19、lt;p> void rtc_tick_init( char tick )</p><p><b> {</b></p><p> Irq_Request(IRQ_TICK, rtc_tick_isr);</p><p> rRTCCON = 0x0; //No reset[3], Merge BCD c
20、ounters[2], BCD clock select XTAL[1], RTC Control disable[0]</p><p> rTICNT = (tick&0x7f)|0x80;/*TICK 中斷使能,周期為(1+tick)/128秒*/ </p><p> Irq_Enable(IRQ_TICK); </p><p><
21、;b> }</b></p><p> void rtc_alarm_set(st_date* p_date, unsigned char mode)</p><p><b> {</b></p><p> Irq_Request(IRQ_RTC, rtc_int_isr);</p><p>
22、rRTCCON = 0x01;</p><p> rALMYEAR = p_date->year;</p><p> rALMMON = p_date->mon;</p><p> rALMDATE = p_date->day;</p><p> rALMHOUR = p_date->hour;</
23、p><p> rALMMIN = p_date->min;</p><p> rALMSEC = p_date->sec;</p><p> rRTCALM = mode;</p><p> rRTCCON = 0x00;</p><p> Irq_Enable(IRQ_RTC); &l
24、t;/p><p><b> }</b></p><p> void Main(void)</p><p><b> {</b></p><p> int old_index ;</p><p> st_date m_date;</p><p>
25、 /* 配置系統(tǒng)時鐘*/</p><p> ChangeClockDivider(1,1); // 1:2:4 </p><p> ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz </p><p> /* 中斷初始化*/</p><p> Isr_Init
26、();</p><p> /* 初始化端口*/</p><p> Port_Init();</p><p> /* 初始化串口*/</p><p> Uart_Init(0,115200);</p><p> Uart_Select(0);</p><p> /* 打印提示信息*/&
27、lt;/p><p> PRINTF("\n---實(shí)時時鐘測試程序---\n");</p><p> PRINTF("\n請將UART0與PC串口進(jìn)行連接,然后啟動超級終端程序(115200, 8, N, 1)\n");</p><p> PRINTF("\n實(shí)時時鐘測試開始\n");</p>
28、<p> /* 采用BCD編碼,如年需要設(shè)置的值為x2004 */</p><p> m_date.year= 0x2000+0x04 ;</p><p> m_date.mon= 0x03 ;</p><p> m_date.day= 0x02 ;</p><p> m_date.week_day=
29、 0x02 ;</p><p> m_date.hour= 0xc5 ;</p><p> m_date.min= 0x40 ;</p><p> m_date.sec= 0x00 ;</p><p> /* 修改當(dāng)前日期和時間*/</p><p> rtc_set_date(&m
30、_date);</p><p> m_date.sec= 0x05 ;</p><p> /* 設(shè)置告警的時間及方式,x41表示使能RTC告警,以及使能秒時鐘告警*/</p><p> rtc_alarm_set(&m_date, 0x41);</p><p> rtc_tick_init(127);</p>
31、<p> old_index = led_index;</p><p> PRINTF("\r\n\r\n"); </p><p><b> while(1)</b></p><p><b> {</b></p><p> if(old_index !=
32、led_index)/* 每隔一秒更新一次數(shù)據(jù)*/</p><p> { rtc_get_date(&m_date);</p><p> old_index = led_index;</p><p> r_BCDHOUR =m_date.hour;</p><p> r_BCDMIN =m_date.min;&
33、lt;/p><p> r_BCDSEC =m_date.sec;</p><p> PRINTF(/* 時鐘數(shù)據(jù)為BCD碼格式,以進(jìn)制顯示*/</p><p> "\b\b\b\b\b\b\b\b%02x:%02x:%02x", m_date.hour, m_date.min, m_date.sec);</p><p&g
34、t;<b> }</b></p><p> *((U8*) 0x10000006) = 0xdf;</p><p> *((U8*) 0x10000004) = segtable[(r_BCDHOUR/16)%16]; </p><p> Delay0(5);</p><p> *((U8*) 0x
35、10000006) = 0xef;</p><p> *((U8*) 0x10000004) = segtable[r_BCDHOUR%16]; </p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xf7;</p><p> *((U8*) 0x10000004)
36、 = segtable[ (r_BCDMIN/16)%16];</p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xfb;</p><p> *((U8*) 0x10000004) = segtable[ r_BCDMIN%16];</p><p> Delay0(5);&l
37、t;/p><p> *((U8*) 0x10000006) = 0xfd;</p><p> *((U8*) 0x10000004) = segtable[(r_BCDSEC/16)%16];</p><p> Delay0(5);</p><p> *((U8*) 0x10000006) = 0xfe;</p><
38、;p> *((U8*) 0x10000004) = segtable[r_BCDSEC%16];</p><p> Delay0(1); </p><p> int ch=Key_GetKeyPoll();</p><p><b> int j;</b></p><p> if(ch!=0) <
39、/p><p> { // PRINTF("\r'%c'鍵按下",ch);</p><p> if(ch=='1') //1鍵按下,修改小時數(shù)</p><p> { int R[2];</p><p><b> int i=0;</b
40、></p><p> for(;i<2;)</p><p><b> {</b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {R[i]=j;i++;}</p>
41、;<p><b> }</b></p><p> int m_date.hour=(R[0]-30)*10+(R[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p> if(ch==
42、39;2') //2鍵按下,修改分鐘數(shù)</p><p><b> {</b></p><p><b> int Q[2];</b></p><p><b> int i=0;</b></p><p> for(;i<2
43、;)</p><p><b> {</b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {Q[i]=j;i++;}</p><p><b> }</b><
44、/p><p> int m_date.min=(Q[0]-30)*10+(Q[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p> if(ch=='3') //3鍵按下,修改
45、秒數(shù)</p><p><b> {</b></p><p><b> int W[2];</b></p><p><b> int i=0;</b></p><p> for(;i<2;)</p><p><b> {</
46、b></p><p> j=Key_GetKeyPoll();</p><p><b> if(j!=0)</b></p><p> {W[i]=j;i++;}</p><p><b> }</b></p><p> int m_date.min=(W[0]-
47、30)*10+W[1]-30);</p><p> rtc_set_date(&m_date);</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b
48、> }</b></p><p> void rtc_tick_isr(void)</p><p><b> {</b></p><p> Irq_Clear(IRQ_TICK); </p><p> led_index++;</p><p><b>
49、; }</b></p><p> void rtc_int_isr(void)</p><p><b> {</b></p><p> Irq_Clear(IRQ_RTC); /*清除RTC中斷*/</p><p> ext0_count++;</p>&
50、lt;p> PRINTF("\r\nAlarm\r\n ");</p><p><b> }</b></p><p> #include "def.h"</p><p> #include "option.h"</p>&l
51、t;p> #include "2410addr.h"</p><p> #include "2410lib.h"</p><p> #include "2410slib.h" </p><p> #include "interrupt.h"</p><p
52、> #include <stdarg.h></p><p> #include <string.h></p><p> #include <stdlib.h></p><p> #include <stdio.h></p><p> #include <ctype.h>
53、;</p><p> void HaltUndef(void);</p><p> void HaltSwi(void);</p><p> void HaltPabort(void);</p><p> void HaltDabort(void);</p><p> void Isr_Init(void)&
54、lt;/p><p><b> {</b></p><p> pISR_UNDEF = (unsigned)HaltUndef;</p><p> pISR_SWI = (unsigned)HaltSwi;</p><p> pISR_PABORT = (unsigned)HaltPabort;</p&g
55、t;<p> pISR_DABORT = (unsigned)HaltDabort;</p><p> rINTMOD = 0x0; //All=IRQ mode</p><p> rINTMSK = BIT_ALLMSK; //All interrupt is masked.</p
56、><p> rINTSUBMSK = BIT_SUB_ALLMSK; //All sub-interrupt is masked. <- April 01, 2002 SOP</p><p><b> }</b></p><p> void Irq_Request(int irq_no, void* irq_rout
57、ine)</p><p><b> {</b></p><p> if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> *(unsigned int*)((irq_no - 1) * sizeof(unsigned int) + (unsigned int)(_
58、ISR_STARTADDRESS+0x20)) = (unsigned int)irq_routine;</p><p><b> }</b></p><p> void Irq_Enable(int irq_no)</p><p><b> {</b></p><p> if(irq_no
59、 >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> rINTMSK &= ~(1 << (irq_no - 1));</p><p><b> }</b></p><p> void Irq_Disable(int irq_no)</p>&l
60、t;p><b> {</b></p><p> if(irq_no >= IRQ_MIN && irq_no <= IRQ_MAX)</p><p> rINTMSK |= (1 << (irq_no - 1));</p><p><b> }</b></p>
61、;<p> void Irq_Clear(int irq_no)</p><p><b> {</b></p><p> rSRCPND = (1 << (irq_no - 1));/*清除RTC中斷*/</p><p> rINTPND = (1 << (irq_no - 1
62、));</p><p><b> rINTPND;</b></p><p> void HaltUndef(void)</p><p><b> {</b></p><p> Uart_Printf("Undefined instruction exception.\n"
63、);</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltSwi(void)</p><p><b> {</b></p><p> Uart_Printf("
64、;SWI exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltPabort(void)</p><p><b> {</b></p>&l
65、t;p> Uart_Printf("Pabort exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> void HaltDabort(void)</p><p><b&g
66、t; {</b></p><p> Uart_Printf("Dabort exception.\n");</p><p><b> while(1);</b></p><p><b> }</b></p><p> #include <string.
67、h></p><p> #include "2410addr.h"</p><p> #include "2410lib.h"</p><p> #include "timer.h"</p><p> #include "interrupt.h"&l
68、t;/p><p> #define RECV_CMD_MAX_BUF 2048</p><p> char recv_buf[RECV_CMD_MAX_BUF];</p><p> int recv_read = 0;</p><p> int recv_write = 0;</p><p> char ke
69、y_recv_buf[RECV_CMD_MAX_BUF];</p><p> int key_recv_read = 0;</p><p> int key_recv_write = 0;</p><p> int timer1_count = 0;</p><p> enum KEYBOARD_SCAN_STATUS</
70、p><p><b> {</b></p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_SECOND,</p><p> KEYBOARD_SCAN_THIRD,</p><p> KEYBOARD_SCAN_FOURTH</p>
71、;<p><b> };</b></p><p> int row = 0;</p><p> extern unsigned char output_0x10000000;</p><p> unsigned char ascii_key, input_key[4], input_key1[4], key_mask =
72、 0x0F;</p><p> unsigned char*keyboard_port_scan = (unsigned char*)0x10000000;</p><p> unsigned char*keyboard_port_value = (unsigned char*)0x10000002;</p><p> int k
73、eyboard_scan_status[4] = {</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST,</p><p> KEYBOARD_SCAN_FIRST</p><p>&l
74、t;b> };</b></p><p> char key_get_char(int row, int col)</p><p><b> {</b></p><p> char key = 0;</p><p> switch( row )</p><p><b
75、> {</b></p><p><b> case 0:</b></p><p> if((col & 0x01) == 0) key = '0'; </p><p> else if((col & 0x02) == 0) key = 'A'; </p>&
76、lt;p> else if((col & 0x04) == 0) key = 'B'; </p><p> else if((col & 0x08) == 0) key = 'F'; </p><p><b> break;</b></p><p><b> case 1:
77、</b></p><p> if((col & 0x01) == 0) key = '7'; </p><p> else if((col & 0x02) == 0) key = '8'; </p><p> else if((col & 0x04) == 0) key = '9
78、9;;</p><p> else if((col & 0x08) == 0) key = 'E';</p><p><b> break;</b></p><p><b> case 2:</b></p><p> if((col & 0x01) == 0)
79、 key = '4'; </p><p> else if((col & 0x02) == 0) key = '5'; </p><p> else if((col & 0x04) == 0) key = '6'; </p><p> else if((col & 0x08) == 0)
80、key = 'D'; </p><p><b> break;</b></p><p><b> case 3:</b></p><p> if((col & 0x01) == 0) key = '1'; </p><p> else if((col
81、& 0x02) == 0) key = '2'; </p><p> else if((col & 0x04) == 0) key = '3'; </p><p> else if((col & 0x08) == 0) key = 'C'; </p><p><b> break
82、;</b></p><p><b> default:</b></p><p><b> break;</b></p><p><b> }</b></p><p> return key;</p><p><b> }&
83、lt;/b></p><p> void recv_key(int key)</p><p><b> {</b></p><p> key_recv_buf[key_recv_write] = key;</p><p> key_recv_write ++;</p><p> i
84、f(key_recv_write >= RECV_CMD_MAX_BUF)</p><p> key_recv_write = 0;</p><p> if(key_recv_write == key_recv_read)</p><p><b> {</b></p><p><b> // 緩沖
85、區(qū)以滿</b></p><p> key_recv_read ++;</p><p> if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p> key_recv_read = 0;</p><p><b> }</b></p><p>
86、;<b> }</b></p><p> void Kbd_Scan(void)</p><p><b> {</b></p><p> int loopcnt = row, bexit = 0;</p><p><b> int temp;</b></p>
87、;<p><b> // 鍵盤掃描</b></p><p> for( loopcnt = row; loopcnt < row + 4; loopcnt ++)</p><p><b> {</b></p><p> if(loopcnt >= 4)</p><p&g
88、t; temp = loopcnt - 4;</p><p><b> else</b></p><p> temp = loopcnt;</p><p> switch(keyboard_scan_status[temp])</p><p><b> {</b></p>&
89、lt;p> case KEYBOARD_SCAN_FIRST:</p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_
90、SECOND;</p><p> bexit = 1;</p><p><b> break;</b></p><p> case KEYBOARD_SCAN_SECOND:</p><p> input_key[temp] = (*keyboard_port_value) & key_mask;/*并
91、獲取第一次掃描值*/</p><p> if(input_key[temp] == key_mask)</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;/* 沒有按鍵,回到開始狀態(tài)*/</p><p><b> else</b></p><
92、p><b> {</b></p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_THIRD;/* 有按鍵*/</p><p> bexit = 1;</p><p><b> }</b></p><p><b> b
93、reak;</b></p><p> case KEYBOARD_SCAN_THIRD:</p><p> if (((*keyboard_port_value) & key_mask) != input_key[temp]) </p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRS
94、T;</p><p><b> else</b></p><p><b> {</b></p><p> ascii_key = key_get_char(temp, input_key[temp]);</p><p> keyboard_scan_status[temp] = KEYB
95、OARD_SCAN_FOURTH;</p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p><p> bexit = 1;</p><p><b> }</b></p&g
96、t;<p><b> break;</b></p><p> case KEYBOARD_SCAN_FOURTH:</p><p> input_key1[temp] = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key1[
97、temp] == key_mask)</p><p><b> {</b></p><p> // get a key</p><p> recv_key(ascii_key);</p><p> keyboard_scan_status[temp] = KEYBOARD_SCAN_FIRST;<
98、;/p><p><b> }else</b></p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<temp)); /*將row列置低電平*/</p>&l
99、t;p> bexit = 1;</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> if(bexit)</b></p>&
100、lt;p><b> break;</b></p><p><b> }</b></p><p> row = temp;</p><p><b> }</b></p><p> char Key_GetKey()</p><p><
101、;b> {</b></p><p><b> char ch;</b></p><p> if(key_recv_write == key_recv_read)</p><p><b> {</b></p><p> /* no key found */</p>
102、;<p><b> ch = 0;</b></p><p><b> }else</b></p><p><b> {</b></p><p> ch = key_recv_buf[key_recv_read];</p><p> key_recv_re
103、ad ++;</p><p> if(key_recv_read >= RECV_CMD_MAX_BUF)</p><p> key_recv_read = 0;</p><p><b> }</b></p><p> return ch;</p><p><b> }&
104、lt;/b></p><p> char Key_GetKeyPoll()</p><p> { int row;</p><p> unsigned char ascii_key, input_key, input_key1, key_mask = 0x0F;</p><p> for( row = 0; row &l
105、t; 4; row++)</p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p> Delay(1);/*延時
106、*/</p><p> input_key = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key == key_mask)continue;/* 沒有按鍵*/</p><p> /* 延時,再次獲取掃描值,如果兩次的值不等,則認(rèn)為是一個干擾
107、*/</p><p><b> Delay(1);</b></p><p> if (((*keyboard_port_value) & key_mask) != input_key) continue;</p><p><b> // 等待按鍵松開</b></p><p>&l
108、t;b> while(1)</b></p><p><b> {</b></p><p> *keyboard_port_scan = output_0x10000000 & (~(0x00000001<<row)); /*將row列置低電平*/</p><p><b>
109、Delay(1);</b></p><p> input_key1 = (*keyboard_port_value) & key_mask;/*并獲取第一次掃描值*/</p><p> if(input_key1 == key_mask)break;/* 沒有按鍵*/</p><p><b> }</b>
110、;</p><p> ascii_key = key_get_char(row, input_key);/* 查表*/</p><p> return ascii_key;/* 顯示結(jié)果*/</p><p><b> }</b></p><p><b> return 0;&
111、lt;/b></p><p><b> }</b></p><p> #include "def.h"</p><p> #include "2410lib.h"</p><p> #include "option.h"</p>&l
112、t;p> #include "2410addr.h"</p><p> #include "interrupt.h"</p><p> #include <stdarg.h></p><p> #include <string.h></p><p> #inclu
113、de <stdlib.h></p><p> #include <stdio.h></p><p> #include <ctype.h></p><p> extern char Image_RW_Limit[];</p><p> void *mallocPt=Image_RW_Limit;&l
114、t;/p><p> static int delayLoopCount = FCLK/10000/10;</p><p> void Delay(int time)</p><p><b> {</b></p><p> int i,adjust=0;</p><p> if(time==0
115、)</p><p><b> {</b></p><p> time = 200;</p><p> adjust = 1;</p><p> delayLoopCount = 400;</p><p> rWTCON = ((PCLK/1000000-1)<<8)|(2
116、<<3); </p><p> rWTDAT = 0xffff; //for first update</p><p> rWTCNT = 0xffff; //resolution=64us @any PCLK </p><p> r
117、WTCON = ((PCLK/1000000-1)<<8)|(2<<3)|(1<<5); //Watch-dog timer start</p><p><b> }</b></p><p> for(;time>0;time--)</p><p> for(i=0;i<delayLoopC
118、ount;i++);</p><p> if(adjust==1)</p><p><b> {</b></p><p> rWTCON = ((PCLK/1000000-1)<<8)|(2<<3); //Watch-dog timer stop</p><p> i = 0xffff
119、 - rWTCNT; //1count->64us, 200*400 cycle runtime = 64*i us</p><p> delayLoopCount = 8000000/(i*64); //200*400:64*i=1*x:100 -> x=80000*100/(64*i) </p><p><
120、b> }</b></p><p><b> }</b></p><p> void Port_Init(void)</p><p><b> {</b></p><p> rGPACON = 0x7fffff; </p><p> rGPBCON
121、 = 0x044555;</p><p> rGPBUP = 0x7ff; // The pull up function is disabled GPB[10:0]</p><p> rGPCCON = 0xaaaaaaaa; </p><p> rGPCUP = 0xffff; // The pull up function
122、 is disabled GPC[15:0] </p><p> rGPDCON = 0xaaaaaaaa; </p><p> rGPDUP = 0xffff; // The pull up function is disabled GPD[15:0]</p><p> rGPECON = 0xaaaaaaaa; </
123、p><p> rGPEUP = 0xffff; // The pull up function is disabled GPE[15:0]</p><p> rGPFCON = 0x55aa;</p><p> rGPFUP = 0xff; // The pull up function is disabled GPF[7:0]</p&g
124、t;<p> #if 0 </p><p> rGPGCON = 0xff95ffba;</p><p> rGPGUP = 0xffff; // The pull up function is disabled GPG[15:0]</p><p> #else </p><p> rGPGC
125、ON = 0xff055555;</p><p> rGPGUP = 0xfffff;</p><p><b> #endif</b></p><p> rGPHCON = 0x2afaaa;</p><p> rGPHUP = 0x7ff; // The pull up function is dis
126、abled GPH[10:0]</p><p> rEXTINT0 = 0x22222222; // EINT[7:0]</p><p> rEXTINT1 = 0x22222222; // EINT[15:8]</p><p> rEXTINT2 = 0x22222222; // EINT[23:16]</p><p&g
127、t; }static int whichUart=0;</p><p> void Uart_Init(int pclk,int baud)</p><p><b> {</b></p><p><b> int i;</b></p><p> if(pclk == 0)</p>
128、;<p> pclk = PCLK;</p><p> rUFCON0 = 0x0; //UART channel 0 FIFO control register, FIFO disable</p><p> rUFCON1 = 0x0; //UART channel 1 FIFO control register, FIFO disable</p&
129、gt;<p> rUFCON2 = 0x0; //UART channel 2 FIFO control register, FIFO disable</p><p> rUMCON0 = 0x0; //UART chaneel 0 MODEM control register, AFC disable</p><p> rUMCON1 = 0x0; //U
130、ART chaneel 1 MODEM control register, AFC disable</p><p> rULCON0 = 0x3; //Line control register : Normal,No parity,1 stop,8 bits</p><p> rUCON0 = 0x245; // Control r
131、egister</p><p> rUBRDIV0=( (int)(pclk/16./baud) -1 ); //Baud rate divisior register 0</p><p> rULCON1 = 0x3;</p><p> rUCON1 = 0x245;</p><p> rUBRDIV1=( (int)(pcl
132、k/16./baud) -1 );</p><p> rULCON2 = 0x3;</p><p> rUCON2 = 0x245;</p><p> rUBRDIV2=( (int)(pclk/16./baud) -1 ); </p><p> for(i=0;i<100;i++);</p><p&
133、gt;<b> }</b></p><p> void Uart_Select(int ch)</p><p><b> {</b></p><p> whichUart = ch;</p><p><b> }</b></p><p> v
134、oid Uart_TxEmpty(int ch)</p><p><b> {</b></p><p><b> if(ch==0)</b></p><p> while(!(rUTRSTAT0 & 0x4)); //Wait until tx shifter is empty.</p><
135、;p> else if(ch==1)</p><p> while(!(rUTRSTAT1 & 0x4)); //Wait until tx shifter is empty.</p><p> else if(ch==2)</p><p> while(!(rUTRSTAT2 & 0x4)); //Wait until tx shif
136、ter is empty.</p><p><b> }</b></p><p> char Uart_Getch(void)</p><p><b> {</b></p><p> if(whichUart==0)</p><p><b> {
137、 </b></p><p> while(!(rUTRSTAT0 & 0x1)); //Receive data ready</p><p> return RdURXH0();</p><p><b> }</b></p><p> else if(whichUart==1)</p&
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子時鐘課程設(shè)計(jì)
- 電子時鐘 課程設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì)
- 課程設(shè)計(jì)--電子時鐘
- 課程設(shè)計(jì)----電子時鐘設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì)--數(shù)字電子時鐘焊接調(diào)試報(bào)告
- 電子時鐘課程設(shè)計(jì) (2)
- 電子時鐘課程設(shè)計(jì)2
- led電子時鐘課程設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì)報(bào)告
- eda課程設(shè)計(jì)---電子時鐘
- 電子時鐘課程設(shè)計(jì) (2)
- 數(shù)字電子時鐘課程設(shè)計(jì)
- 數(shù)字電子時鐘課程設(shè)計(jì)
- eda課程設(shè)計(jì)--電子時鐘
- 電子時鐘課程設(shè)計(jì)--proteus環(huán)境下的電子時鐘設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì)(論文)
- 數(shù)字電子時鐘課程設(shè)計(jì)
- 電子時鐘課程設(shè)計(jì) (3)
評論
0/150
提交評論