亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ARM:UART串口異步通信驅動編程

2019-11-11 04:30:09
字體:
來源:轉載
供稿:網友
1. 串口的基本概念1.1 UART - 串行異步收發器 Universal Asynchronous Receiver/Transmitter串行/并行(課后補充)異步/同步:'異步/同步通信兩者之間的區別' (補充)'單工/半雙工/全雙工:單工:任何時候數據只能朝一個方向傳輸半雙工:數據可以向兩個方向傳輸,任何同一時刻只能朝同一方向傳輸全雙工:數據可以同時向兩個方向傳輸1.2 串口通信標準RS232 (電子工業協議EIA) - 目前最常用的'串行接口標準'規定了'電氣特性':邏輯 0 ,+3 v ~ +15 v,SPACE邏輯 1 ,- 3 v ~ - 15 v,MARK規定了'機械特性':傳輸距離 < 10 mTTL電平,計算機內部電平(CPU):邏輯 0 ,低電平 < 0.8 v邏輯 1 ,高電平 > 2.4 v串行異步通信的重要參數:>>數據位個數: 5 ~ 8 bit  (開發板那端定好的是 8 bit / 幀數據)>>驗證方式:奇校驗、偶校驗、無校驗>>停止位寬度:1~2bit>>通信的速率:bps (bit per second - 每秒傳輸bit位)'波特率單位'2. 電路原理圖【底板】             |---SP3232E電平轉換芯片---|PC_TXD1 ---> T2OUT ---> T2IN ---> UARTTXD0 ---> 'GPIOD18PC_RXD1 ---> R2IN ---> R2OUT ---> UARTRXD0 ---> 'GPIOD14完成串口通信有兩種方式:1) 一種方式:運行在arm core的程序和LED一樣直接操作GPIO管腳,形成串行異步收發數據的時序。2) 另一方式:S5P6818中集成了uart控制器,方式 1)純軟件實現通信的過程就可以使用軟硬件結合的方式來實現通信時序,從而簡化軟件編程。問題:uart控制器可以完成哪些工作,還需軟件做哪些工作,兩者之間如何配合?答案:CPU的數據手冊中關于uart的相關章節3. CPU datasheet3.1 管腳的功能選擇--->P 71 - 2.3GPIOD18 - Function1GPIOD14 - Function1--->P 757 - 16.5.1.8GPIODALTFN0 - 0xc001d020 - [29:28] - 01=ALT Function1GPIODALTFN1 - 0xc001d020 - [ 5 : 4 ] - 01=ALT Function13.2 uart 控制器--->P 960 - 25.1' S5P6818串行異步收發器 UART 單元特點:1) 提供 6 個獨立的uart控制器2) 數據傳輸可以使用輪詢、中斷、DMA方式3) 采用系統時鐘時最大傳輸速率 4 Mbps   // 采用外部時鐘時可以達更大速率4) 每個UART通道有兩個 64 bytes FIFO供發送和接收數據,以提供較高效率5) 可編程波特率、紅外發送接收、1~2個停止位、5~8位數據寬度、奇偶校驗問題:COM1對應的是CPU內部的哪個uart控制器?答案:根據COM1使用的是CPU上的GPIOD14、GPIOD18,推斷對應的是CPU內部的'UART0'。知識點:'CPU感知外接硬件變化通常有3種方式:1> 輪詢; // 定時對各種設備輪流詢問一遍有無處理要求,有要求就處理,處理完回歸CPU日常工作。- 適合硬件變化頻繁的狀況2> 中斷; // 當有硬件設備處理要求是,CPU啟動輸入輸出設備存檔準備數據,I/O完成發出中斷信號,接收中斷處理數據,隨后某個時刻繼續工作。 - 適合硬件變化不是特別頻繁的狀況3>DMA;// 直接內存存取,direct memory access,數據在內存與I/O設備間直接進行成塊傳輸。'【UART控制器重要參數】non-FIFO - 115200 - 8 - None - 1 - 輪詢modeULCON0 - 0xc00a1000 - R/W- [ 1 : 0 ] - 11 , 8 bit - 數據寬Word lenth- [ 2 ] - 0 , 1 bit - 停止位number of stop bit- [ 5 : 3 ] - 000 - 無校驗- [ 6 ] - 0 - 紅外正常模式UCON0 - 0xc00a1004 - R/W- [ 1 : 0 ] - 01 - 輪詢接收 Receive Mode(Polling mode)- [ 3 : 2 ] - 01 - 輪詢發送 Transmit Mode(Polling mode)- [ 5 ] - 01 - 設置輪詢模式 Setting Loop-back modeUFCON0 - 0xc00a1008 - R/W- [ 0 ] - 0 - 禁用FIFO(non-FIFO) FIFO DisablesUTRSTAT0 - 0xc00a1010 - R- [ 0 ] - 1 - 代表收到了數據 Buffer has a received data- [ 1 ] - 0 / 1 - 0 代表 transmit buffer 非空, 1 代表空UTXH0 - 0xc00a1020 - W- [ 7 : 0 ] - 寫入要發送的數據 Transmit Data for UART0URXH0 - 0xc00a1024 - R- [ 7 : 0 ] - 讀出接收到的數據 Receive Data for UART0--->P 313 - 5.3.2.1.13 UARTCLKENB - '時鐘源配置,地址數與UART對應UARTCLKENB - 0xc00a9000 - R/W- [ 2 ] - 1 - 使UART0時鐘使能 Enable UARTCLKGEN0L - 0xc00a9004 - R/W- [ 4 : 2 ] - 1 - 時鐘源頻率選擇 PLL[1]==800MHz(uboot中調為該頻率)- [12: 5 ] - 1111 1111 - 分頻系數,提供給UART0的時鐘信號 50 MHz// 1M==100萬,800M==8億,1111==0x0f,800MHz(0x0f+1)=50MHz--->P 986 - 25.4.1.11/25.4.1.12 - '用于分頻,將輸入的50MHz分頻成適合每秒鐘發送115200個bit所需要的時鐘信號UBRDIV0 - 0xc00a1028 - R/W - 經計算取值為 26UFRACVAL0 - 0xc00a102c - R/W - 經計算取值為 2--->P 969 - For example // 設置方法示例
/* 手冊定好的計算方式,不需要問為什么,直接套公式即可。DIV_VAL = (40000000/(115200 x 16))  –  1= 21.7 – 1= 20.7UBRDIVn = 20 (integer part of DIV_VAL)UFRACVALn/16 = 0.7 So, UFRACVALn = 11*/50000000 / (115200 * 16) - 1 = 27.13 - 1 = 26.13 = 26 【==UBRDIV0】0.13 * 16 = 2.08 = 2 【==UFRACVAL0】【匯總】S5P6818UART相關寄存器1) UART行控制器ULCONn - 設置數據格式2) UART模式控制寄存器UCONn - 用來選擇時鐘源,發送/接收數據可選輪詢3) UART FIFO控制寄存器UFCONn4) UART MODEM控制寄存器UMCONn5) 發送寄存器UTXH、接收寄存器URXH6) 波特率分頻寄存器UBRDIV,UFRACVAL7) GPIO相關寄存器8) 中斷相關寄存器9) 時鐘、電源控制寄存器4. 編碼
/** 代碼演示 - main.c **/#include "uart.h"void main (void) {    // 8N1 115200 non-FIFO polling    uart_init ( );    while (1) {        uart_puts ("/n hello,world!");    }   }
/** 代碼演示 - uart.c **/#define UART0CLKENB     *((volatile unsigned int*)0xc00a9000)#define UART0CLKGEN0L   *((volatile unsigned int*)0xc00a9004)#define GPIOD_ALTFN0    *((volatile unsigned int*)0xc001d020)#define GPIOD_ALTFN1    *((volatile unsigned int*)0xc001d024)#define GPIOD_PULLENB   *((volatile unsigned int*)0xc001d060)#define ULCON0          *((volatile unsigned int*)0xc00a1000)#define UCON0           *((volatile unsigned int*)0xc00a1004)#define UFCON0          *((volatile unsigned int*)0xc00a1008)#define UTRSTAT0        *((volatile unsigned int*)0xc00a1010)#define UTXH0           *((volatile unsigned int*)0xc00a1020)#define URXH0           *((volatile unsigned int*)0xc00a1024)#define UBRDIV0         *((volatile unsigned int*)0xc00a1028)#define UFRACVAL0       *((volatile unsigned int*)0xc00a102c)void uart_init (void) {    /* uart0 clk disable */    UART0CLKENB &= ~(1 << 2);    // GPIOD18(Tx 接收管腳) GPIOD14(Rx 發送管腳) 配置功能Function1    GPIOD_ALTFN0 &= ~(3 << 28); // GPIOD14    GPIOD_ALTFN0 |= (1 << 28);    GPIOD_ALTFN1 &= ~(3 << 4); // GPIOD18    GPIOD_ALTFN1 |= (1 << 4);    // 時鐘配置:選擇PLL[1] 800MHz    UART0CLKGEN0L &= ~(7 << 2);    UART0CLKGEN0L |= (1 << 2);    // 分頻設置 800/(0x0f+1)=50MHz    UART0CLKGEN0L &= ~(0xff << 5); // [12:5] 8個位    UART0CLKGEN0L |= (0xf << 5); // [12:5] 4個位設置為1111    // UART控制器設置    ULCON0  = 0x03; // 8N1    UCON0   = 0x05; // 0101 == 0x05 polling    UFCON0 &= ~(1 << 0); // non-FIFO disable    UBRDIV0 = 26; // 50000000/(115200*16) - 1 == 26.13    UFRACVAL0 = 2; // 0.13*16 == 2.08    /* uart0 clk enable */    UART0CLKENB |= (1 << 2);}void uart_putc (char c) {    // UTRSTAT0 bit[1] == 1, 緩存寄存器為empty    // 輪詢是否為空    while (! (UTRSTAT0 & 0x02)); // !(空) 什么都不干。    UTXH0 = c;    if (c == '/n')        uart_putc ('/r');}void uart_puts (char* str) {    if (! str)        return ;    while (*str) {        uart_putc (*str);        str++;    }}
/** 代碼演示 - uart.h **/#ifndef _UART_H_#define _UART_H_extern void uart_init (void);extern void uart_puts (char*);#endif //_UART_H_

5. 編譯

$:' arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib main.c -o main.o$:' arm-cortex_a9-linux-gnueabi-gcc -c -nostdlib uart.c -o uart.o$:' arm-cortex_a9-linux-gnueabi-ld -nostdlib -nostartfiles -Ttext=48000000 -emain main.o uart.o -o uart      // 注意.o文件順序$:' arm-cortex_a9-linux-gnueabi-objcopy -O binary uart uart.bin6. 運行$:' sudo cp uart.bin /tftpboot/X6818#:' tftp 48000000 uart.binX6818#:' go 48000000
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美成人一区二区在线电影| 久久久女人电视剧免费播放下载| 日韩精品一区二区三区第95| 国产日韩欧美电影在线观看| 国产精品黄色影片导航在线观看| 国产婷婷97碰碰久久人人蜜臀| 国产精品夫妻激情| 国产综合久久久久久| 国产精品第100页| 久久91精品国产| 亚洲色在线视频| 亚洲精品国产福利| 日韩免费av一区二区| 国产精品无av码在线观看| 亚洲级视频在线观看免费1级| 久久久极品av| 久久国产精品久久久| 日韩av免费网站| 精品视频一区在线视频| 日韩电影在线观看永久视频免费网站| 91久久国产精品91久久性色| 18久久久久久| 欧美一级片在线播放| 欧美日韩性生活视频| 91国在线精品国内播放| 久久精品国产一区二区电影| 97国产精品人人爽人人做| 在线看福利67194| 亚洲第一男人天堂| 久久国产精品久久久久| 久久五月情影视| 欧美极品少妇xxxxⅹ裸体艺术| 国产视频在线观看一区二区| 日产精品久久久一区二区福利| 不用播放器成人网| 亚洲天堂网在线观看| 欧美乱妇高清无乱码| 久久精品视频免费播放| 国产精品亚洲片夜色在线| 国产精品一区=区| 欧美精品一本久久男人的天堂| 91wwwcom在线观看| 亚洲free性xxxx护士白浆| 成人国内精品久久久久一区| 亚洲国产精品久久久久| 色青青草原桃花久久综合| 欧美老肥婆性猛交视频| 在线视频亚洲欧美| 神马久久桃色视频| 亚洲天堂精品在线| 精品久久久免费| 狠狠躁天天躁日日躁欧美| 欧美色视频日本版| 欧美黑人巨大xxx极品| 日韩在线视频观看正片免费网站| 久久久久五月天| 日韩福利视频在线观看| 日韩欧美aⅴ综合网站发布| 97碰碰碰免费色视频| 91av视频在线免费观看| 久久久亚洲精品视频| 97香蕉久久夜色精品国产| 色妞色视频一区二区三区四区| 91av在线免费观看| 国产偷国产偷亚洲清高网站| 日本午夜人人精品| 日韩免费观看在线观看| 色婷婷综合成人av| 欧美另类第一页| 亚洲аv电影天堂网| 在线成人激情视频| 欧美日韩美女在线| 97色在线播放视频| 日本久久久久久久久久久| 国产精品爽爽爽爽爽爽在线观看| 青青久久aⅴ北条麻妃| 亚洲欧美激情四射在线日| 在线成人一区二区| 91成人在线视频| 最近2019年手机中文字幕| 亚洲国产精品久久久| 在线精品高清中文字幕| 日韩高清免费在线| 九九久久久久久久久激情| 91国语精品自产拍在线观看性色| 91国产一区在线| 欧美激情亚洲视频| 亚洲精品视频久久| 国产精品久久久精品| 国产97免费视| 亚洲日本中文字幕免费在线不卡| 亚洲国产成人爱av在线播放| 亚洲成人激情在线观看| 91国产精品电影| 欧美国产日韩免费| 国产成人小视频在线观看| 欧美日韩亚洲系列| 欧美性视频精品| 日韩av在线电影网| 91久久嫩草影院一区二区| 55夜色66夜色国产精品视频| 欧洲午夜精品久久久| 国产精品99久久99久久久二8| 美女精品久久久| 国产精品久久久久久亚洲调教| 精品久久久久久中文字幕大豆网| 欧美一区二区三区免费视| 亚洲高清福利视频| 欧美激情影音先锋| 亚洲色图第一页| 国产成人精品日本亚洲| 日韩电影中文字幕在线观看| 日韩专区在线观看| 亚洲国产欧美自拍| 亚洲精品自拍第一页| 欧美激情欧美狂野欧美精品| 国产性色av一区二区| 日韩av在线一区| 国产精品久久久久久久久久久久久久| 日韩视频在线免费观看| 国产成人精品a视频一区www| 久久久久久久久久久久av| 久久精品电影网站| 久久久久国色av免费观看性色| 日韩在线中文字| 69影院欧美专区视频| www.欧美免费| 九九热精品视频国产| 国产精品久久国产精品99gif| 亚洲天堂开心观看| 欧美精品videosex极品1| 中日韩午夜理伦电影免费| 成人黄色av网站| 久久精品国产v日韩v亚洲| 国产精品美女www爽爽爽视频| 欧美老少配视频| 北条麻妃在线一区二区| 日本韩国欧美精品大片卡二| 中文字幕综合在线| 精品无人区太爽高潮在线播放| 5566成人精品视频免费| 欧美日韩免费一区| 日韩在线视频观看正片免费网站| 精品国产拍在线观看| 久久精品视频导航| 国产色婷婷国产综合在线理论片a| 中文字幕不卡av| 欧美日韩在线观看视频小说| 岛国av一区二区三区| 亚洲成年人在线播放| 欧美激情亚洲综合一区| 国产精品久久久久久久久久小说| 国产综合久久久久| 亚洲成人免费网站| 91欧美视频网站| 亚洲毛片在线免费观看| 国产精品一区二区久久国产| 国产精品入口日韩视频大尺度| 成人午夜激情网| 国产99久久精品一区二区永久免费| 欧美野外wwwxxx| 91国内免费在线视频| 亚洲伊人一本大道中文字幕| 日韩成人在线播放|