如何編寫UART程序呢?
1、串口初始化
step1:設(shè)置引腳
① 設(shè)置引腳用于串口.GPH2,3用于TX0,RX0
清位,然后設(shè)置
② 設(shè)置TX0,RX0內(nèi)部上拉,即配置GPHUP寄存器
step2:設(shè)置波特率(UBRDIV0)— 115200 ==PCLK=50MHz=> UBRDIV0 = 26
① 設(shè)置UCON0 — 選擇時(shí)鐘為PCLK,中斷/查詢模式
② 設(shè)置波特率分頻寄存器UBRDIV0
UBRDIVn = (int)(UART時(shí)鐘/(波特率 × 16))–1
UART時(shí)鐘:PCLK,F(xiàn)CLK/n 或UEXTCLK
step3:設(shè)置數(shù)據(jù)格式,8n1:數(shù)據(jù)位8位,無(wú)奇偶校驗(yàn),停止位1位
設(shè)置ULCON0寄存器
串口初始化函數(shù):
void uart0_init()
{
/* 設(shè)置引腳用于串口 */
/* GPH2,3用于TxD0, RxD0 */
GPHCON &= ~((3<<4) | (3<<6));
GPHCON |= ((2<<4) | (2<<6));
GPHUP &= ~((1<<2) | (1<<3)); /* 使能內(nèi)部上拉 */
/* 設(shè)置波特率 */
/* UBRDIVn = (int)( UART clock / ( buad rate x 16) ) –1
* UART clock = 50M
* UBRDIVn = (int)( 50000000 / ( 115200 x 16) ) –1 = 26
*/
UCON0 = 0x00000005; /* PCLK,中斷/查詢模式 */
UBRDIV0 = 26;
/* 設(shè)置數(shù)據(jù)格式 */
ULCON0 = 0x00000003; /* 8n1: 8個(gè)數(shù)據(jù)位, 無(wú)較驗(yàn)位, 1個(gè)停止位 */
/* */
}
獲取單個(gè)字符函數(shù):
int getchar(void)
{
while (!(UTRSTAT0 & (1<<0)));
return URXH0;
}
打印單個(gè)字符函數(shù)
int putchar(int c)
{
/* UTRSTAT0 */
/* UTXH0 */
while (!(UTRSTAT0 & (1<<2)));
UTXH0 = (unsigned char)c;
}
打印字符串函數(shù):
int puts(const char *s)
{
while (*s)
{
putchar(*s);
s++;
}
}
===========================================
啟動(dòng)代碼:
.text
.global _start
_start:
/* 關(guān)閉看門狗 */
ldr r0, =0x53000000
ldr r1, =0
str r1, [r0]
/* 設(shè)置MPLL, FCLK : HCLK : PCLK = 400m : 100m : 50m */
/* LOCKTIME(0x4C000000) = 0xFFFFFFFF */
ldr r0, =0x4C000000
ldr r1, =0xFFFFFFFF
str r1, [r0]
/* CLKDIVN(0x4C000014) = 0X5, tFCLK:tHCLK:tPCLK = 1:4:8 */
ldr r0, =0x4C000014
ldr r1, =0x5
str r1, [r0]
/* 設(shè)置CPU工作于異步模式 */
mrc p15,0,r0,c1,c0,0
orr r0,r0,#0xc0000000 //R1_nF:OR:R1_iA
mcr p15,0,r0,c1,c0,0
/* 設(shè)置MPLLCON(0x4C000004) = (92<<12)|(1<<4)|(1<<0)
* m = MDIV+8 = 92+8=100
* p = PDIV+2 = 1+2 = 3
* s = SDIV = 1
* FCLK = 2*m*Fin/(p*2^s) = 2*100*12/(3*2^1)=400M
*/
ldr r0, =0x4C000004
ldr r1, =(92<<12)|(1<<4)|(1<<0)
str r1, [r0]
/* 一旦設(shè)置PLL, 就會(huì)鎖定lock time直到PLL輸出穩(wěn)定
* 然后CPU工作于新的頻率FCLK
*/
/* 設(shè)置內(nèi)存: sp 棧 */
/* 分辨是nor/nand啟動(dòng)
* 寫0到0地址, 再讀出來(lái)
* 如果得到0, 表示0地址上的內(nèi)容被修改了, 它對(duì)應(yīng)ram, 這就是nand啟動(dòng)
* 否則就是nor啟動(dòng)
*/
mov r1, #0
ldr r0, [r1] /* 讀出原來(lái)的值備份 */
str r1, [r1] /* 0->[0] */
ldr r2, [r1] /* r2=[0] */
cmp r1, r2 /* r1==r2? 如果相等表示是NAND啟動(dòng) */
ldr sp, =0x40000000+4096 /* 先假設(shè)是nor啟動(dòng) */
moveq sp, #4096 /* nand啟動(dòng) */
streq r0, [r1] /* 恢復(fù)原來(lái)的值 */
bl main
halt:
b halt
上一篇:S3C2440芯片時(shí)鐘配置
下一篇:最后一頁(yè)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- API調(diào)用小記(Touchdesigner和ESP32)
- 關(guān)于ESP32/8266使用async-mqtt-client庫(kù)的一些基本介紹
- 意法半導(dǎo)體緊湊型可配置車規(guī)負(fù)載驅(qū)動(dòng)器具備安全引腳
- 美光宣布在美投資增至 2000 億美元,加建晶圓廠和 HBM 封裝設(shè)施
- AMD舉辦Advancing AI 2025大會(huì):Instinct MI350系列GPU發(fā)布,35倍推理性能提升
- 特斯拉起訴前Optimus機(jī)器人工程師,指控其竊取商業(yè)機(jī)密
- Nordic Semiconductor將在MWC上海2025上展示前沿蜂窩物聯(lián)網(wǎng)解決方案
- SiC 市場(chǎng)的下一個(gè)爆點(diǎn):共源共柵(cascode)結(jié)構(gòu)詳解
- 香港科技大學(xué)工學(xué)院推出擬人化自動(dòng)駕駛系統(tǒng)
- 現(xiàn)代摩比斯推出新型安全技術(shù) 防止追尾碰撞
- 研究人員開發(fā)新型機(jī)器人系統(tǒng) 利用AI賦能機(jī)器人技術(shù)
- 研究人員開發(fā)具有突破性觸覺(jué)靈敏度的機(jī)械手 可實(shí)現(xiàn)類人靈巧操作
- Microchip 有獎(jiǎng)問(wèn)答,信號(hào)增益或?yàn)V波的原始傳感器應(yīng)用方案
- TI汽車方案拼圖,你敢挑戰(zhàn)嗎?
- 有獎(jiǎng)直播 | 英飛凌新型固態(tài)隔離器的創(chuàng)新技術(shù)與應(yīng)用設(shè)計(jì)
- TI MCU 常見(jiàn)問(wèn)題(FAQ)大搜集
- 雙 11 拯救行動(dòng):用開發(fā)板治愈單身狗之憂桑
- 有獎(jiǎng)直播:安森美光伏和儲(chǔ)能產(chǎn)品介紹
- 直播報(bào)名:TI 用于感測(cè)應(yīng)用、帶可配置信號(hào)鏈元素的新型MSP430™ MCU,報(bào)名直播贏雙重好禮!
- 五一活動(dòng)上線!動(dòng)動(dòng)手,一起來(lái)場(chǎng)舊物\"勞動(dòng)\"大改造吧
- OPPO進(jìn)軍歐洲,能否延續(xù)東南亞市場(chǎng)輝煌
- Littelfuse 推出擴(kuò)展化的PolySwitch? setP? 系列數(shù)字溫度指示器
- 小米發(fā)紅米6系列手機(jī):599元的價(jià)格也能有小愛(ài)同學(xué)
- 柳工三維輔助設(shè)計(jì)系統(tǒng)項(xiàng)目案例分享
- 華為訂購(gòu)6.9英寸三星AMOLED屏 或用于Mate 20系列
- 10億元埃眸科技納米光刻機(jī)項(xiàng)目重要投資方“現(xiàn)身”了
- 紅米86英寸電視7999元,至少15個(gè)品牌利益將受損
- 深耕企業(yè)級(jí)SSD市場(chǎng)10年,憶恒創(chuàng)源宣布完成數(shù)億元的E輪融資
- 天數(shù)智芯完成C輪12億人民幣融資,填補(bǔ)國(guó)內(nèi)GPGPU市場(chǎng)空白
- 一些常見(jiàn)的視頻音頻如何實(shí)現(xiàn)格式轉(zhuǎn)換
- 我這邊電流傳感器的穩(wěn)壓管(3.3V),但是有個(gè)問(wèn)題
- 如圖CCS5.2.1編譯警告:無(wú)中斷處理程序
- CC2530內(nèi)置溫度傳感器溫度計(jì)算方法
- TVS、壓敏電阻等保護(hù)類器件的布局問(wèn)題
- 請(qǐng)高手解決
- 漏電保護(hù)裝置安裝和運(yùn)行
- EEWORLD大學(xué)堂----CC2640R2F軟件速成
- 2.4 GHz CDMA無(wú)線電收發(fā)器CYWUSB6934應(yīng)用電路
- 感覺(jué)USB3還沒(méi)普及呢,USB4來(lái)了!
- STR912有人成功擴(kuò)充外部存儲(chǔ)器(16bitSRAM)嗎?