uart初始化。
1 我們可以通過原理圖可知道 串列埠的rxd,txd 分別連線在ok6410 gpa0,gpa1 口上的。。所以首先設定gpio 的輸入輸出狀態:0010=uart rxd[0] 0010=uart txd[0]
同時設定相應的上下拉電阻關係。
2 uart 初始化:
2.1、配置uart 0 通道行控制暫存器。ulcon0格式如下圖所示
rulcon0=rulcon0&(0xffffffff)|(0<<6)|(0<<3)|(0<<2)|(3<<0); //普通操作模式 無校驗 1位停止位 8位資料位
![](https://pic.w3help.cc/069/8db14314efcc86862ff660ee00f39.jpeg)
2.2 配置 ucon0暫存器。
2.3、配置ufcon0暫存器
2.4、配置 rumcon0 暫存器
2.5、設定波特率 ubrdiv0,udivslot0 暫存器
因為上面 配置ucon0暫存器的時候選擇 該模式 所以採用以下公式
div_val = (pclk / (b/s × 16 ) ) –1
pclk=66mhz =66000000hz
div_val=66000000/(115200× 16)) - 1
=35.8-1
=34.8
ubrdivn = 20 (div_val 的整數部分)
(udivslotn 中 1 的數量)/16 = 0.8
這時, (udivslotn 中 1 的數量) = 12
因此, udivslotn 為 16』b1101_1101_1101_1101 或者 16』b0111_0111_0111_0101 等。
num of 1』s udivslotn num of 1』s udivslotn
0 0x0000(0000_0000_0000_0000b) 8 0x5555(0101_0101_0101_0101b)
1 0x0080(0000_0000_0000_1000b) 9 0xd555(1101_0101_0101_0101b)
2 0x0808(0000_1000_0000_1000b) 10 0xd5d5(1101_0101_1101_0101b)
3 0x0888(0000_1000_1000_1000b) 11 0xddd5(1101_1101_1101_0101b)
4 0x2222(0010_0010_0010_0010b) 12 0xdddd(1101_1101_1101_1101b)
5 0x4924(0100_1001_0010_0100b) 13 0xdfdd(1101_1111_1101_1101b)
6 0x4a52(0100_1010_0101_0010b) 14 0xdfdf(1101_1111_1101_1111b)
7 0x54aa(0101_0100_1010_1010b) 15 0xffdf(1111_1111_1101_1111b)
根據上述分析:
rubrdiv0=34;
rudivslot0=0xdddd;
3 uart 傳送
主函式呼叫 uart_printf()函式實現列印功能
uart 傳送的時候是通過判斷fifo緩衝器(utrstat0 的第二位 )是否為空,如果為空則傳送。 (這個是在 ufcon0 暫存器中第六位 設定的)
最終工程檔案:
6410之uart的配置
主程式start.s define config periport base 0x70000000 define config periport size 0x13 define wtcon 0x7e004000 global start start 告訴cpu 外設的位址 ldr r0,confi...
關於ok6410 LED and BEEP驅動程式
苦於現在市面上的資料大多是關於arm9,關於6410的卻很少,但是我堅信,6410正以他的優勢席捲嵌入式這個行業,所以,在此寫下一些關於驅動的開端。當初自學微控制器,我跟大多數一樣,從點亮乙個led燈開始,然後流水燈,蜂鳴器,數碼管等開始微控制器程式設計,算是入了門,現在玩arm驅動,我想也通過這幾...
OK6410裸機程式 hello world
上面已經解決 了幾個問題。現在我們的狀態 可以在pc ok6410 之間進行tftp傳輸,確定了一下可用的位址 空間,下面我們來說一下printf除錯 因為沒有jlink,只能用printf除錯,你也許會問,我們自己實現printf麼?答曰 不是,我們只是弄個hello world,何必那麼認真呢?...