mini2440 UART查詢和中斷方式

2021-05-28 11:26:40 字數 2510 閱讀 3229

1、初始化:

a、把使用到的引腳gph2、gph3定義為txd0、rxd0:

gphcon |= 0xa0

gphup |= 0xf0(禁止上拉)

b.ulcon0 ( uart channel 0 line control register ):設為0x03

此值含義為:8個資料位,1個停止位,無校驗,正常操作模式(與之相對的是infra-red mode,此模式表示0、1的方式比較特殊)。

c.ucon0 (uart channel 0 control register ):設為0x5

除了位[3:0],其他位都使用預設值。位[3:0]=0b0101表示:傳送、接收都使用「中斷或查詢方式」——本實驗使用查詢查詢方式。

d.ufcon0 (uart channel 0 fifo control register ):設為0x00

每個uart內部都有乙個16位元組的傳送fifo和接收fifo,但是本實驗不使用fifo,設為預設值0

e.umcon0 (uart channel 0 modem control register ):設為0x00

本實驗不使用流控,設為預設值0

f.ubrdiv0 ( r/w baud rate divisior register 0 ):設為26

本實驗未使用pll, pclk=50mhz,設定波特率為115200,則由公式

ubrdivn = (int)(pclk / (bps x 16) ) –1

可以計算得ubrdiv0 =26,請使用s3c2440資料手冊第314頁的誤差公式驗算一下此波特率是否在可容忍的誤差範圍之內,如果不在,則需要更換另乙個波特率。

2、傳送資料:

a.utrstat0 ( uart channel 0 tx/rx status register ):

位[2]:無資料傳送時,自動設為1。當我們要使用串列埠傳送資料時,先讀此位以判斷是否有資料正在占用傳送口。

位[1]:傳送fifo是否為空,本實驗未用此位

位[0]:接收緩衝區是否有資料,若有,此位設為1。本實驗中,需要不斷查詢此位一判斷是否有資料已經被接收,中斷模式下等待中斷觸發。

b.utxh0 (uart channel 0 transmit buffer register ):把要傳送的資料寫入此暫存器。

3、接收資料:

a.utrstat0:如同上述「2、傳送資料」所列,我們用到位[0]

b.urxh0 (uart channel 0 receive buffer register ):

當查詢到utrstat0 位[0]=1時,讀此暫存器獲得串列埠接收到的資料。

#define 

global_clk 

1#include

#include

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

#include "memtest.h"

#define led1_on 

~(1<<5)

#define led1_off 

(1<<5)

void delay(int times)//延時函式

void led_port_init(void)

void beep_init(void)//蜂鳴器初始化

void beep(void) 

void uart0_init(void)

void main(void)}}

以下為中斷方式:

#define global_clk 

1#include

#include

#include "def.h"

#include "option.h"

#include "2440addr.h"

#include "2440lib.h"

#include "2440slib.h"

#include "mmu.h"

#include "profile.h"

#include "memtest.h"

#define led1_on 

~(1<<5)

#define led1_off 

(1<<5)

void delay(int times)//延時函式

void led_port_init(void)//設定gpb5為輸出埠

void beep_init(void)//蜂鳴器初始化

void beep(void) 

void uart0_init(void)

void inte_init()

void __irq uartisp(void)//中斷處理函式

else 

//傳送資料處理部分  }

void main(void)//主函式

mini2440系統引導(五)串列埠UART

s3c2440a 的通用非同步收發器 uart 配有 3 個獨立非同步序列 i o sio 埠,每個都可以是基於中斷或基 於 dma 模式的操作。換句話說,uart 可以通過產生中斷或 dma 請求來進行 cpu 和 uart 之間的資料傳輸。uart 通過使用系統時鐘可以支援最高 115.2kbp...

移植dhcp到mini2440中 動態ip

開發板要上網,但是得動態獲取ip,使用busybox中的udhcpc,老是 sending discover.使用移植dhcp客戶端的方法,解決了問題。步驟如下 2.交叉編譯 解壓 3.拷貝生成的dhclient到目標板上,為方便使用,可以放在 usr bin 下 拷貝另外兩個配置檔案到開發板,分別...

微控制器UART中斷應用中TXE和TC的順序

今天回顧之前寫過的一些程式,發現了當時乙個比較有意思的修改記錄,想了會才回憶起當時的具體意圖,記錄下來備忘,也分享給看到的朋友們。案例是以stm32f107晶元為主控的乙個環境汙染物監測裝置,在裡面用到485通訊,因485晶元需要通過控制管腳設定傳送和接受狀態,所以就要求對uart的控制要有足夠的精...