




已閱讀5頁,還剩92頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第二章串行通信 一 通信概念介紹二 簡單的單工串行通信舉例三 UART異步串行接口應(yīng)用四 SPI串行接口應(yīng)用五 I2C串行總線應(yīng)用六 附錄 RS 232標(biāo)準(zhǔn)和RS 485標(biāo)準(zhǔn) 一 通信的基本概念 微處理器與外設(shè)交換數(shù)據(jù)的過程中可選擇以下兩種方式 并行通信 數(shù)據(jù)的各個(gè)數(shù)位同時(shí)傳送 傳輸速度快 信息率高 占用的引腳資源多 需要的電纜多 成本高 遠(yuǎn)距離通信時(shí)數(shù)據(jù)的可靠性和抗干擾性下降 串行通信 數(shù)據(jù)按照位順序一位一位傳送 傳輸距離長 抗干擾性強(qiáng) 占用的引腳資源少 成本低 1 1串行通信方式 通信雙方只要約定好通信格式和通信速度即可通信 串行通信方式可分為兩類 異步通信 在異步串行通信中沒有同步時(shí)鐘信號 同步通信 在同步串行通信中數(shù)據(jù)傳送受到同步時(shí)鐘的控制 1 2異步通信 異步通信中 微處理器與外設(shè)之間必須有兩項(xiàng)規(guī)定 第一項(xiàng)規(guī)定 雙方通信時(shí)采用怎樣的數(shù)據(jù)格式 例如UART串行通信雙方規(guī)定 用ASCII編碼 字符為7位 加一個(gè)偶校驗(yàn)位 一個(gè)起始位以及一個(gè)停止位 則一個(gè)字符總共由10位組成 形成的數(shù)據(jù)格式如圖所示 第二項(xiàng)規(guī)定 即雙方通信過程中每發(fā)送一個(gè)數(shù)位需要多長的時(shí)間 在有些場合也稱之為波特率 即每秒鐘傳送的二進(jìn)制位數(shù) bps 數(shù)據(jù)傳送的速率為120字符 秒 每一個(gè)字符是10位 則波特率為1200bps PC串口 115200bps921600bpsModem 19200bps工業(yè)場合 4800bpsUART和1 Wire通信標(biāo)準(zhǔn)就是常見的異步通信 在異步通信中發(fā)送器和接收器不必用同一個(gè)時(shí)鐘 只要求各局部時(shí)鐘同一標(biāo)稱頻率 波特率 1 3同步通信 在大量數(shù)據(jù)傳送時(shí) 采用通信雙方 發(fā)送器 接收器 在同一個(gè)時(shí)鐘控制下傳輸數(shù)據(jù)的同步通信 同步通信是先將許多的字符聚集成一字符塊 再將每塊信息 常稱為信息幀 之前加上1 2個(gè)同步字符 接著再加適當(dāng)?shù)腻e(cuò)誤檢測數(shù)據(jù)到字符塊 最后才傳送出去 注意 在同步通信時(shí) 數(shù)據(jù)上沒有字符傳輸時(shí) 必須發(fā)送專用的空閑字符或是同步字符 冗余 把傳輸?shù)臄?shù)據(jù)位當(dāng)做被除數(shù) 發(fā)送器本身產(chǎn)生一個(gè)固定的除數(shù) 前者除以后者得到的余數(shù)即為冗余字符 1 4串行通信制式 在單工制式下 數(shù)據(jù)只能從發(fā)送站向接收站傳送 如圖 在半雙工制式下 數(shù)據(jù)能雙向傳送 但是不能同時(shí)在兩個(gè)方向上傳送 如圖 全雙工制式下 接收數(shù)據(jù)和發(fā)送數(shù)據(jù)占用不同的線路 全雙工通信可以同時(shí)發(fā)送和接收 如圖 在串行通信中數(shù)據(jù)是在兩個(gè)站之間進(jìn)行傳送的 按照數(shù)據(jù)傳送方向 串行通信可分為單工 半雙工和全雙工3種制式 1 5串行通信分類 串行通信標(biāo)準(zhǔn)有許多 下面僅對部分常見的串行通信標(biāo)準(zhǔn)進(jìn)行簡單介紹 二 最簡單的單工串行通信舉例 與外設(shè)串行通信過程中 數(shù)據(jù)是一位一位依次順序傳送的 而在微處理器內(nèi)部 數(shù)據(jù)是并行處理和傳送的 當(dāng)微處理器發(fā)送數(shù)據(jù)到外設(shè)時(shí) 必須要先把并行的數(shù)據(jù)轉(zhuǎn)換為串行數(shù)據(jù)再傳送 當(dāng)微處理器接收來自外設(shè)的數(shù)據(jù)時(shí) 必須要先把接收到的串行數(shù)據(jù)轉(zhuǎn)換為并行數(shù)據(jù)才能處理 這種并 串之間的轉(zhuǎn)換既可用硬件實(shí)現(xiàn)也可用軟件實(shí)現(xiàn) 本小節(jié)以74LS164芯片為例 介紹如何用軟件方法實(shí)現(xiàn)數(shù)據(jù)的串 并轉(zhuǎn)換 ARM與74LS164之間的串行通信 1 1實(shí)驗(yàn)?zāi)康呐c內(nèi)容 實(shí)驗(yàn)?zāi)康?學(xué)會(huì)用軟件方法模擬串行通信的時(shí)序 完成串行通信 深刻理解串行通信的原理 掌握時(shí)序分析的基本方法 實(shí)驗(yàn)內(nèi)容 完成ARM芯片與74LS164芯片之間的串行通信 利用LED燈顯示傳輸?shù)臄?shù)據(jù) 在完成基本通信的實(shí)驗(yàn)基礎(chǔ)上 實(shí)現(xiàn)流水燈效果 1 2 1實(shí)驗(yàn)原理分析 A B 串行數(shù)據(jù)輸入端 Clock 時(shí)鐘輸入端 Clear 清零端 低電平有效 QA QH 數(shù)據(jù)輸出引腳 1 2 274LS164真值表 74LS164的時(shí)鐘是由ARM處理器產(chǎn)生 每來1個(gè)上升沿74LS164就接收1位數(shù)據(jù) 假設(shè)要使QA QH 10110011 則ARM要發(fā)送一串?dāng)?shù)據(jù)10110011給A B輸入端 并產(chǎn)生相應(yīng)的時(shí)鐘信號 如下圖 1 3電路原理圖 defineLS164 DATA 1 25 LS164 DATA 0 x02000000 defineLS164 CLK 1 29 LS164 CLK 0 x20000000 defineLS164 CLR 1 17 LS164 CLR 0 x00020000 74LS164通過ARM的3個(gè)I O腳 P1 17 P3 29 P0 25 分別控制74LS164芯片的清零端口 CLR 時(shí)鐘端口 CLK 和數(shù)據(jù)端口 DATA 引腳定義如下 1 4 1程序清單 初始化子程序 名稱 voidLS164 Init void 功能 初始化子程序 入口參數(shù) 無 出口參數(shù) 無 voidLS164 Init void PINSEL1 PINSEL1 設(shè)置P1 17為輸出 1 4 2程序清單 發(fā)送數(shù)據(jù)子程序 voidLS164 SendData uint8data uint8j 定義一個(gè)8位無符號整型變量jIO1CLR LS164 CLR 74LS164輸出清零IO1SET LS164 CLR 模擬時(shí)鐘信號 循環(huán)8次完成數(shù)據(jù)傳送 for j 0 j 1 data右移一位IO3SET LS164 CLK 向74LS164發(fā)送一個(gè)高電平時(shí)鐘信號 IO3CLR LS164 CLK 1 4 3程序清單 主程序 uint8constLS164 TAB 32 0 x00 0 x01 0 x03 0 x07 0 x0F 0 x1F 0 x3F 0 x7F 0 xFF 0 x7F 0 x3F 0 x1F 0 x0F 0 x07 0 x03 0 x01 0 x00 0 x81 0 x42 0 x24 0 x18 0 x3c 0 x7e 0 xff 0 x00 0 xff 0 x00 0 x55 0 xaa 0 x55 0 xaa 0 x00 名稱 main 功能 通過64LS164控制LED燈 實(shí)現(xiàn)流水燈 intmain void uint8i LS164 Init 引腳初始化while 1 發(fā)送數(shù)據(jù) for i 1 i 32 i LS164 SendData LS164 TAB i DelayMS 100 大約延時(shí)100毫秒 詳見第一章蜂鳴器控制程序 return 0 1 5實(shí)驗(yàn)結(jié)果 觀看實(shí)驗(yàn)板 每次由ARM處理器向74LS164芯片發(fā)送一個(gè)8位數(shù)據(jù) LED的開關(guān)會(huì)發(fā)生相應(yīng)的變化 當(dāng)程序連續(xù)運(yùn)行時(shí) 實(shí)驗(yàn)板上會(huì)出現(xiàn)各種燈閃爍的效果 三 UART異步串行接口應(yīng)用 UART通信標(biāo)準(zhǔn)就有專門的硬件UART 即異步接收 發(fā)送器 UART有2個(gè)對外連接的引腳 RxD TxD RxD是輸入引腳 用于串行數(shù)據(jù)接收 TxD是輸出引腳 用于串行數(shù)據(jù)發(fā)送 1 1硬件UART的結(jié)構(gòu)框圖 UART數(shù)據(jù)的接收過程示意圖 UART數(shù)據(jù)的發(fā)送過程示意圖 1 2UART的功能 1 傳輸轉(zhuǎn)換功能UART既能發(fā)送 把并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)輸出 又能接收 把接收的串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)輸入 2 奇偶校驗(yàn)功能UART在發(fā)送時(shí) 檢查每個(gè)要傳送的字符中的 1 的個(gè)數(shù) 自動(dòng)在奇偶校驗(yàn)位上添 l 或 0 使之滿足要求 UART在接收時(shí) 檢查每個(gè)字符的各位及奇偶校驗(yàn)位 1 的個(gè)數(shù)是否滿足要求 3 出錯(cuò)標(biāo)識功能常用的有以下三種 奇偶錯(cuò)誤幀錯(cuò)誤溢出錯(cuò)誤 1 3UART通信協(xié)議 UART異步串行通信協(xié)議需要定義以下5個(gè)內(nèi)容 1 起始位2 數(shù)據(jù)位3 奇偶校驗(yàn)位4 停止位5 波特率設(shè)置 范例如圖 1 4UART的應(yīng)用 UART一般可以應(yīng)用到如下一些場合 1 芯片間的近距離通信2 與PC機(jī)之間的通信3 模塊之間的遠(yuǎn)距離通信 1 芯片間的近距離通信 同一塊板卡上的芯片需要通信時(shí) 我們可以采用UART異步串行通信 連接示意圖如下 2 與PC機(jī)的通信 RS 232 C接口是PC機(jī)目前最常用的一種串行通訊接口 芯片利用UART可以與PC機(jī)進(jìn)行通訊 由于接口不同從而電流不同 需要使用RS232轉(zhuǎn)換器對通訊信號進(jìn)行轉(zhuǎn)換 芯片接RS232轉(zhuǎn)換器與PC機(jī)通訊圖 3 模塊之間的遠(yuǎn)距離通信 RS 485接口的最大傳輸距離可達(dá)3000米 最高傳輸速率10Mbps 且抗噪聲干擾性好 RS 485的電氣特性 邏輯 1 以兩線間的電壓差為 2V 6V表示 邏輯 0 以兩線間的電壓差為 2V 6V表示 接口信號電平比RS 232 C降低了 該電平與TTL電平兼容 可方便與TTL電路連接 RS 485通信電路示意圖 RS 485接口具有多站能力 能夠?qū)崿F(xiàn)多機(jī)間遠(yuǎn)距離通信 下圖是基于RS 485的多機(jī)通信系統(tǒng) 1 5LPC2220內(nèi)部UART模塊 UART0具有16字節(jié)發(fā)送FIFO和16字節(jié)接收FIFO UART0內(nèi)置了波特率發(fā)生器 UART0主要包括3個(gè)模塊 UART0接收器模塊 U0Rx UART0發(fā)送器模塊 U0Tx UART0波特率發(fā)生器模塊 U0RBG UART0波特率發(fā)生器模塊 U0RBG 產(chǎn)生UART0所使用的定時(shí) U0BRG模塊時(shí)鐘源為VPB時(shí)鐘 pclk 它保存了VPB時(shí)鐘 pclk 的分頻值 時(shí)鐘源 pclk 與除數(shù)鎖存LSB寄存器 U0DLL 和除數(shù)鎖存MSB寄存器 U0DLM 所定義的除數(shù)相除得到UART0模塊所使用的時(shí)鐘 該時(shí)鐘必須為波特率的16倍 波特率計(jì)算如下 分頻后的時(shí)鐘 pclk U0DLM 256 U0DLL 波特率 分頻后的時(shí)鐘 16 問題 系統(tǒng)時(shí)鐘 pclk 為64MHz UART0串行通信所需要的波特率為115200bps 如何設(shè)置U0DLL和U0DLM 除數(shù) 64MHz 16 115200 U0DLM 除數(shù) 256 0U0DLL 除數(shù) 256 36注意 當(dāng)U0DLM和UODLL中的值為0 x0000時(shí) 系統(tǒng)默認(rèn)為0 x0001 1 6寄存器介紹 UART0包含10個(gè)8位寄存器 U0RBR U0THR U0SCR U0DLL U0DLM U0IER U0FCR U0LCR U0IIR U0LSR 除數(shù)鎖存訪問位DLAB 1時(shí)可以設(shè)置波特率 U0LCR線控制寄存器 U0LCR決定發(fā)送和接收數(shù)據(jù)字符的格式 U0LSR線狀態(tài)寄存器 U0LSR為只讀寄存器 它提供UART0的接收和發(fā)送模塊的當(dāng)前狀態(tài)信息 UART0的初始化設(shè)置程序 名稱 UART0 Init unit32UART BPS 功能 初始化串口0 設(shè)置波特率 數(shù)據(jù)位長度 停止位長度 奇偶校驗(yàn)類型默認(rèn)設(shè)置為8位數(shù)據(jù)位 1位停止位 無奇偶校驗(yàn) 入口參數(shù) UART BPS 出口參數(shù) 無 VoidUART0 Init uinit32UART BPS unit16Fdiv PINSEL0 0 x00000005 設(shè)置P0 0 Txd 和P0 1 Rxd 連接到UART0 設(shè)置波特率 U0LCR 0 x83 DLAB 1 可設(shè)置波特率Fdiv Fpclk 16 UART BPS 計(jì)算分頻值U0DLM Fdiv 256 U0DLL Fdiv 256 設(shè)置數(shù)據(jù)格式 U0LCR 0 x03 8位數(shù)據(jù)長度 1個(gè)停止位 禁止奇偶校驗(yàn)位 UART0初始化包括三項(xiàng)內(nèi)容 1引腳連接功能的設(shè)置2波特率的設(shè)置3通信數(shù)據(jù)格式的設(shè)置 1 7實(shí)驗(yàn)?zāi)康呐c內(nèi)容 實(shí)驗(yàn)?zāi)康?掌握LPC2220的UART模塊中各個(gè)控制寄存器的設(shè)置 并能使用UART通信標(biāo)準(zhǔn)與PC機(jī)或其他板塊進(jìn)行通信 實(shí)驗(yàn)內(nèi)容1 使用UART0通過RS 232接口向PC機(jī)發(fā)送數(shù)據(jù) 并在PC機(jī)的超級終端上顯示 實(shí)驗(yàn)內(nèi)容2 使用UART1通過RS485接口與另一個(gè)板塊進(jìn)行通信 通信數(shù)據(jù)通過8個(gè)LED燈顯示 實(shí)驗(yàn)1 PC機(jī)一般都會(huì)配有1 2個(gè)RS232串行通信接口 簡稱COM口 利用COM口PC機(jī)可以與外部設(shè)備實(shí)現(xiàn)通信連接 本實(shí)驗(yàn)中 我們用ARM實(shí)驗(yàn)平臺連接PC機(jī) 名稱 UART0 SendByte uint8data 功能 向串口發(fā)送一個(gè)字節(jié)數(shù)據(jù) 并等待發(fā)送完畢 入口參數(shù) data要發(fā)送的字節(jié)數(shù)據(jù) voidUART0 SendByte uint8data U0THR data 發(fā)送數(shù)據(jù)while U0LSR 實(shí)驗(yàn)1程序清單 實(shí)驗(yàn)1程序清單 uint8constUART0 SEND TAB Oh Succeed n 名稱 main 功能 向串口UART0發(fā)送字符串 Oh Succeed intmain void uint8 str data UART0 Init 115200 while 1 str UART0 SEND TAB while str 0 UART0 SendByte str 向PC機(jī)發(fā)送數(shù)據(jù)data UART0 RcvByte 等待PC發(fā)送數(shù)據(jù) return 0 實(shí)驗(yàn)1結(jié)果 在AXD調(diào)試軟件中全速運(yùn)行程序 串口調(diào)試助手 將會(huì)顯示一串字符 Oh Succeed 當(dāng)PC臺式機(jī)向?qū)嶒?yàn)板發(fā)送任何字符后 串口調(diào)試助手的接收窗口會(huì)再多一串字符 Oh Succeed 實(shí)驗(yàn)2 當(dāng)設(shè)備間需要遠(yuǎn)距離通信時(shí)可以考慮采用RS485通信 Max483是一款半雙工的芯片 板卡1用于數(shù)據(jù)發(fā)送 客戶端 板卡2用于數(shù)據(jù)接收 服務(wù)器端 實(shí)驗(yàn)2程序清單 服務(wù)端程序 defineDERE 1 10 連接P0 10 名稱 UART1 Init uint32UART BPS 功能 ARM處理器UART1相關(guān)引腳與功能模塊的初始化 入口參數(shù) UART BPS串口的波特率 voidUART1 Init uint32UART BPS uint16Fdiv PINSEL0 PINSEL0 8位字符長度 1個(gè)停止位 禁止奇偶效驗(yàn) 名稱 uint8UART1 RcvByte void 功能 通過RS 485接收一字節(jié)數(shù)據(jù) 出口參數(shù) data接收到的數(shù)據(jù) uint8UART1 RcvByte void uint8rcv data IO0CLR DERE RE引腳置低 使其處于接收狀態(tài)while U1LSR 實(shí)驗(yàn)2參考程序清單 客戶端程序 voidUART1 SendData uint8data IO0SET DERE DE引腳置高 使Max483處于發(fā)送狀態(tài)U1THR data 發(fā)送數(shù)據(jù)while U1LSR 四 SPI串行接口應(yīng)用 SPI是由Motorola公司提出的一種同步串行外圍接口 它在速度要求不高 低功耗 需保存少量參數(shù)的智能化傳感系統(tǒng)中得到了廣泛應(yīng)用 SPI是一個(gè)全雙工的同步串行接口 在數(shù)據(jù)傳輸過程中 總線上只能是一個(gè)主機(jī)和一個(gè)從機(jī)進(jìn)行通信 在數(shù)據(jù)傳輸中 主機(jī)總是向從機(jī)發(fā)送1字節(jié)的數(shù)據(jù) MOSI 同時(shí)從機(jī)向主機(jī)發(fā)送1字節(jié)的數(shù)據(jù) MISO 1 1SPI接口的信號描述 1 MISO MasterInSlaveOut 主機(jī)輸入 從機(jī)輸出信號 2 MOSI MasterOutSlaveIn 主機(jī)輸出 從機(jī)輸入信號 3 SCK SerialClock 串行時(shí)鐘信號 4 SS SlaveSelect 從機(jī)選擇信號 低電平有效 注意 1 主設(shè)備必須為微處理器 從設(shè)備可以是微處理器也可以是其他帶有SPI接口的芯片 2 主設(shè)備的SS應(yīng)接高電平 3 先發(fā)送MSB 在發(fā)送LSB 4 SCK由主設(shè)備產(chǎn)生 主設(shè)備和從設(shè)備必須在相同的時(shí)序下工作 1 2基于SPI接口的系統(tǒng)組成 SPI總線可在軟件的控制下構(gòu)成各種簡單或復(fù)雜的系統(tǒng) SPI總線與多從機(jī)連接示意圖 1 3SPI接口的工作原理 SPI的基本結(jié)構(gòu)相當(dāng)于兩個(gè)8位移位寄存器的首尾相接 構(gòu)成16位的環(huán)形移位寄存器 從而實(shí)現(xiàn)了主機(jī)與從機(jī)的數(shù)據(jù)交換 SPI接口的基本結(jié)構(gòu)圖 1 4LPC2220內(nèi)部SPI模塊 LPC2220中具有兩個(gè)完全獨(dú)立的SPI控制器 SPI0和SPI1 其中SPI0模塊有4個(gè)引腳 SCK0 SSEL0 MISO0 MOSI0 其功能如下 一個(gè)SPI總線可以連接多個(gè)主機(jī)和多個(gè)從機(jī) 但是在同一時(shí)刻只允許有一個(gè)主機(jī)操作總線 可通過SSEL引腳設(shè)置LPC222為SPI主機(jī)或從機(jī) 1 5SPI數(shù)據(jù)傳輸 SPI接口可由CPOL和CPHA設(shè)定4種不同傳輸格式的時(shí)序 CPOL決定時(shí)鐘脈沖SCK的有效脈沖方式 正脈沖 負(fù)脈沖 CPHA決定數(shù)據(jù)線MOSI什么時(shí)候輸出數(shù)據(jù)或采集數(shù)據(jù) 根據(jù)CPOL和CPHA的組合數(shù)目 一共有4種設(shè)置情況 4種時(shí)序下的數(shù)據(jù)傳輸 其中 第一位數(shù)據(jù)的輸出 和 其他位數(shù)據(jù)的輸出 欄是表示數(shù)據(jù)在什么時(shí)候更新輸出 還需注意數(shù)據(jù)采樣是上升沿還是下降沿有效 數(shù)據(jù)與時(shí)鐘的相位關(guān)系如圖 1 6SPI寄存器 LPC的SPI內(nèi)部結(jié)構(gòu)框圖如表所示 SPI內(nèi)部包括控制寄存器 數(shù)據(jù)寄存器 狀態(tài)寄存器 時(shí)鐘計(jì)數(shù)寄存器 中斷標(biāo)志寄存器 具體描述見表 SPI控制寄存器 SPCR SPI狀態(tài)寄存器 SPSR SPI數(shù)據(jù)寄存器 SPDR SPI時(shí)鐘寄存器 SPCCR SPI中斷標(biāo)志寄存器 SPINT 1 7SPI的使用 1 主機(jī)操作SSEL0引腳接高電平 數(shù)據(jù)傳輸步驟為 設(shè)置S0PCCR寄存器 確定分頻值 設(shè)置S0PCR寄存器 控制SPI0為主機(jī) 當(dāng)有多個(gè)從機(jī)情況下 控制片選信號 選擇要通信的從機(jī) 將要發(fā)送的數(shù)據(jù)寫入S0PDR寄存器 即啟動(dòng)SPI傳輸 讀取S0PSR寄存器 等待SPIF位置位 從SPI數(shù)據(jù)寄存器中讀出接收到的數(shù)據(jù) 可選 如果還有數(shù)據(jù)要傳送 則重復(fù)第4 6步驟 否則取消對從機(jī)選擇 第4 6步驟 通過SSEL引腳的電平可以配置LPC2220為SPI主機(jī)或?yàn)镾PI從機(jī) LPC2220內(nèi)部SPI支持主機(jī)操作和從機(jī)操作 下面以SPI0模塊為例分別介紹 1 7SPI的使用 2 從機(jī)操作SSEL0引腳接低電平 數(shù)據(jù)傳輸步驟為 設(shè)置S0PCR寄存器 控制SPI0為從機(jī) 不需要設(shè)置S0PCCR寄存器 將要發(fā)送的數(shù)據(jù)寫入S0PDR 可選 讀取S0PSR寄存器 等待SPIF位置位 從SPI數(shù)據(jù)寄存器中讀出接收到的數(shù)據(jù) 可選 如果還有數(shù)據(jù)要傳送 則跳到第2步 74HC595芯片介紹 當(dāng)SCLR為低電平時(shí) 輸出端Q清零 當(dāng)SCLR 1 SCK出現(xiàn)上升沿時(shí) 內(nèi)部寄存器移位并接收SER端發(fā)來的數(shù)據(jù) 當(dāng)RCK出現(xiàn)上升沿時(shí) 74HC595內(nèi)部寄存器的數(shù)據(jù)輸出到QA QH 74HC595在SCK上升沿進(jìn)行數(shù)據(jù)采樣 因此CPOL 0 CPHA 0 真值表 74HC595引腳圖 1 8電路原理圖分析 74HC595的控制端口和SPI串行通信端口連接LPC2220的相關(guān)引腳 并行輸出端口QA QH連接到數(shù)碼管上 數(shù)碼管輸出顯示的內(nèi)容完全取決于SPI0模塊所傳輸?shù)膬?nèi)容 1 9程序清單 名稱 SPI0 SendData 功能 向SPI總線發(fā)送數(shù)據(jù) 并接收從機(jī)發(fā)回的數(shù)據(jù) 入口參數(shù) data待發(fā)送的數(shù)據(jù) 出口參數(shù) 返回值為接收到的數(shù)據(jù) uint8SPI0 SendData uint8data S0PDR data while 0 S0PSR 名稱 voidHC595 Init void 功能 初始化引腳與SPI0模塊 入口參數(shù) 無 出口參數(shù) 無 voidHC595 Init void 引腳初始化 PINSEL0 PINSEL0 設(shè)置SPI接口模式 MSTR 1 主模式 CPOL 0 CPHA 0 LSBF 1 LSB在前 definesmgA1 1 22 p2 22連接數(shù)碼管的第一個(gè)位選端uint8constTAB 10 0 xC0 0 xF9 0 xA4 0 xB0 0 x99 0 x92 0 x82 0 xF8 0 x80 0 x98 intmain void uint8i HC595 Init HC595初始化 打開數(shù)碼管 IO2DIR IO2DIR smgA1 IO2CLR smgA1 while 1 向74HC595發(fā)送數(shù)據(jù) for i 0 i 10 i HC595 SendData TAB i DelayMS 1 五 I2C串行總線應(yīng)用 I2CBUS是Philips公司推出的一種基于兩線的芯片間串行傳輸總線 I2C總線采用了器件地址的硬件設(shè)置方法 通過軟件尋址完全避免了器件的片選線尋址方法 從而使硬件系統(tǒng)具有最簡單而靈活的擴(kuò)展方法 I2C總線在標(biāo)準(zhǔn)模式下 數(shù)據(jù)傳輸率可達(dá)100kbps 高速模式下可達(dá)400kbps 目前I2C總線被廣泛應(yīng)用于消費(fèi)類電子產(chǎn)品 通信產(chǎn)品 儀器儀表及工業(yè)測控系統(tǒng)中 1 1基于I2C總線的系統(tǒng)組成 在I2C總線上只需要串行數(shù)據(jù)SDA線和串行時(shí)鐘SCL線兩條線 每個(gè)器件都有一個(gè)唯一的地址以供識別 并工作在主模式或者從模式下 而且各器件都可以作為一個(gè)發(fā)送器或接收器 主模式用于初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸時(shí)鐘信號SCL 從模式則被主器件尋址 并被動(dòng)的接受和發(fā)送數(shù)據(jù) 微控制器包含的I2C發(fā)送 接收器都可以選擇作為主模式 Master 或從模式 Slave 工作 但任一時(shí)刻I2C總線上只允許一個(gè)微控制器工作在主模式下 作為主控器 而另一個(gè)微控制器必須工作在從模式下 作為被控器 1 2I2C總線的特點(diǎn) 1 二線傳輸2 無中心主機(jī)3 軟件尋址4 應(yīng)答式數(shù)據(jù)傳輸過程5 節(jié)點(diǎn)可帶電接入或撤出 1 3I2C信號描述與數(shù)據(jù)傳輸 1 起始信號和終止信號I2C總線的時(shí)鐘線SCL與數(shù)據(jù)線SDA均為雙向傳輸線 時(shí)鐘線SCL高電平時(shí) 數(shù)據(jù)線出現(xiàn)由高電平向低電平變化的啟動(dòng)信號 啟動(dòng)I2C總線 時(shí)鐘線SCL高電平時(shí) 數(shù)據(jù)線上出現(xiàn)由低到高的電平變化 此信號即為I2C總線的停止信號 結(jié)束I2C總線的數(shù)據(jù)傳輸 起始信號和終止信號均有主機(jī)發(fā)出 I2C總線的啟動(dòng)信號與停止信號 2 數(shù)據(jù)信號I2C總線在進(jìn)行數(shù)據(jù)傳輸時(shí) 在時(shí)鐘線為高電平期間 數(shù)據(jù)線上必須保持穩(wěn)定的邏輯電平狀態(tài) 只有在時(shí)鐘線為低電平時(shí) 才允許數(shù)據(jù)線上的電平狀態(tài)發(fā)生變化 數(shù)據(jù)位的傳輸 3 應(yīng)答信號數(shù)據(jù)發(fā)送方每發(fā)送一個(gè)字節(jié)數(shù)據(jù)后 需要得到數(shù)據(jù)接收方的一個(gè)應(yīng)答信號 應(yīng)答信號通過數(shù)據(jù)線 SDA 傳輸 與應(yīng)答信號相對應(yīng)的時(shí)鐘 第9個(gè)時(shí)鐘 由主控器產(chǎn)生 如圖所示 I2C總線的數(shù)據(jù)傳輸格式 傳輸?shù)牡谝粋€(gè)8位數(shù)據(jù)為尋址字節(jié) 包括7位的被控器地址和1位方向位 接著被控器發(fā)出A 應(yīng)答位 緊接著的是主控器與被控器之間數(shù)據(jù)傳輸和應(yīng)答 在數(shù)據(jù)傳輸完成后 主控器要發(fā)出停止信號 數(shù)據(jù)傳輸格式如圖 讀寫位 1讀0寫 1 4LPC2220內(nèi)部I2C模塊 LPC2220內(nèi)部具有I2C總線接口模塊 可與連接外部標(biāo)準(zhǔn)I2C部件接口 LPC2220的I2C模塊可配置為主機(jī) 從機(jī)或主 從機(jī) LPC2220的I2C接口包含7個(gè)寄存器如表所列 I2C控制置位寄存器I2CONSETI2CONSET寄存器的某一位寫入1 相應(yīng)位將置1 對該寄存器寫入0 相應(yīng)位不會(huì)置0 必須向I2CONCLR寄存器寫入1來實(shí)現(xiàn)某一位的清零操作 I2C狀態(tài)寄存器I2STAT主發(fā)送模式下的狀態(tài)寄存器 I2C狀態(tài)寄存器I2STAT主接收模式下的狀態(tài)寄存器 I2C數(shù)據(jù)寄存器I2DAT I2C從地址寄存器I2ADR I2C的SCL時(shí)鐘寄存器I2SCLHI2CSCLL I2DAT中的數(shù)據(jù)移位總是從右至左進(jìn)行 第一個(gè)發(fā)送的位是MSB 第一個(gè)接收的位也是MSB 在主模式下 I2ADR無效 位頻率 Fpclk I2SCLH I2SCLL I2SCLH和I2SCLL的值必須大于4 在從模式下 I2SCLH和I2SCLL無效 1 5I2C模塊的使用 LPC2220系列可配置為I2C主機(jī)和從機(jī)具有2種模式 主 從模式下的操作包括 1 初始化操作2 數(shù)據(jù)發(fā)送操作3 數(shù)據(jù)接收操作 主模式下的初始化操作 先設(shè)置I O口功能選擇 然后設(shè)置總線的速率 再配置好I2CONSET寄存器和I2CONCLR寄存器 配置I2CONSET寄存器和I2CONCLR寄存器主要完成以下一些任務(wù) 1 選擇主機(jī)模式 AA 0 2 使能主I2C I2EN 1 3 清零某些位 SI 0 STA 0 具體操作 向I2CONSET寄存器寫入Ox40會(huì)將I2EN置1 即使能I2C接口 向I2CONCLR寫入Ox2C會(huì)將AA STA和SI置0 I2C主模式設(shè)置程序 名稱 I2C Init unit32F I2C 功能 I2C模塊初始化為主模式 未打開中斷 入口參數(shù) F I2C初始化I2C總線速率 最大值為40K 出口參數(shù) 無 voidI2C Init unit32F I2C PINSELO PISELO OxFFFFFOF Ox50 設(shè)置I2C控制口有效if F I2C 400000 F I2C 40000 I2SCLH Fpclk F I2C 1 2 設(shè)置I2C時(shí)鐘為F I2CI2SCLL Fpclk F I2C 2 I2CONCLR Ox2C I2CONSET Ox40 使能主I2C 主模式下的數(shù)據(jù)發(fā)送 主模式I2C的數(shù)據(jù)發(fā)送格式見圖所示 起始信號S和停止信號P用于指示串行傳輸?shù)钠鹗己徒Y(jié)束 數(shù)據(jù)的發(fā)送每次為8位 即一字節(jié) 每發(fā)送完一個(gè)字節(jié) 主機(jī)都接收到一個(gè)應(yīng)答位 是由從機(jī)回發(fā)的 操作步驟如下 1 置位STA進(jìn)入I2C主發(fā)送模式 I2C邏輯在總線空閑后 立即發(fā)送一個(gè)起始條件 2 當(dāng)發(fā)送起始條件后 等待SI置位 只有當(dāng)SI 1時(shí) I2DAT才能訪問并保持穩(wěn)定狀態(tài) 此時(shí)I2STAT的狀態(tài)為08H 3 把從地址和讀寫操作位裝入I2DAT 清零SI位 開始發(fā)送從地址和讀寫操作位 4 當(dāng)把從地址和讀寫操作位已發(fā)送并且接受到從機(jī)應(yīng)答位后 SI位再次置位 現(xiàn)在的狀態(tài)碼可能為18H 20H 38H 5 如果狀態(tài)碼為18H 表明主機(jī)已經(jīng)接收到應(yīng)答位 則可以將數(shù)據(jù)裝入I2DAT寄存器 然后清零SI位 開始發(fā)送數(shù)據(jù) 6 正確發(fā)送數(shù)據(jù)后 SI位再次置位 可能的狀態(tài)碼為28H 30H 此時(shí)可以根據(jù)狀態(tài)碼進(jìn)行下一個(gè)操作 主模式下的數(shù)據(jù)發(fā)送 名稱 I2C Send 功能 主發(fā)送模式 與從器件進(jìn)行數(shù)據(jù)交互 入口參數(shù) SlaveAddr從器件地址pSendData待發(fā)送的數(shù)據(jù)指針Num發(fā)送的數(shù)據(jù)長度 出口參數(shù) 1代表發(fā)送成功 0代表發(fā)送失敗 uint8I2C Send unit8SlaveAddr uint8 pSendData uint32Num uint32i I2CONSET 0 x20 發(fā)送起始位while I2CONSET 等待SI置位 if I2STAT 0 x18 未接收到應(yīng)答 則發(fā)送停止位 數(shù)據(jù)傳輸中止 I2CONSET 0 x10 return0 發(fā)送Num個(gè)字節(jié)數(shù)據(jù)數(shù)據(jù) for i 0 i Num i I2CONCLR 0 x08 SI位清零I2DAT pSendData i while I2CONSET 主模式下的數(shù)據(jù)接收 主機(jī)所接收的數(shù)據(jù)字節(jié)來自從發(fā)送器 即從機(jī) 起始和停止條件用于指示串行傳輸?shù)钠鹗己徒Y(jié)束 第一個(gè)發(fā)送的數(shù)據(jù)包含接收器件的從地址 7位 和讀寫操作位 1位 操作步驟如下 1 置位STA進(jìn)入I2C主接收模式 I2C邏輯在總線空閑后 立即發(fā)送一個(gè)起始條件 2 當(dāng)發(fā)送起始條件后 等待SI置位 只有當(dāng)SI 1時(shí) I2DAT才能訪問并保持穩(wěn)定狀態(tài) 此時(shí)I2STAT的狀態(tài)為08H 3 清零SI位 把從地址和讀寫操作位裝入I2DAT 開始發(fā)送從地址和讀寫操作位 4 當(dāng)把從地址和讀寫操作位已發(fā)送并且接受到從機(jī)應(yīng)答位后 SI位再次置位 現(xiàn)在的狀態(tài)碼可能為38H 40H 48H 5 如果狀態(tài)碼為40H 表明主機(jī)已經(jīng)接收到應(yīng)答位 設(shè)置AA位 用來控制接收數(shù)據(jù)后產(chǎn)生應(yīng)答位還是非應(yīng)答位 然后清零SI位 開始接收數(shù)據(jù) 6 正確發(fā)送數(shù)據(jù)后 SI位再次置位 可能的狀態(tài)碼為50H 58H 此時(shí)可以根據(jù)狀態(tài)碼進(jìn)行下一個(gè)操作 從模式下的初始化操作 LPC2220系列器件配置為I2C從機(jī)時(shí) I2C主機(jī)可以對它進(jìn)行讀 寫操作 要初始化從接收模式 并向I2CONSET寫入0 x44實(shí)現(xiàn)I2C使能和AA位置1 向I2CONCLR寫入0 x28清零起始位和中斷標(biāo)識 即可等待主機(jī)訪問 通常初始化程序中加入了中斷的初始化 I2C總線時(shí)鐘信號是由主機(jī)產(chǎn)生 所以從機(jī)不用初始化I2SCLH和I2SCLL寄存器 I2C從模式初始化設(shè)置 名稱 I2C SlaveInit 功能 從模式I2C初始化 包括初始化其中斷為向量IRQ中斷 入口參數(shù) adr本從機(jī)地址 出口參數(shù) 無 voidI2C Slavlnit uit8adr PINSELO PINSELO OxFFFFFFOF Ox50 設(shè)置I2C控制口有效I2ADR adr OxFE 設(shè)置從機(jī)地址I2CONCLR 0 x28 I2CONSET Ox44 I2C配置為從機(jī)模式 設(shè)置I2C中斷允許 VICIntselect OxOOOOOOOO 設(shè)置所有通道為IRQ中斷VICVectCntl0 Ox29 I2C通道分配到IRQslot0 即優(yōu)先級最高VICVectAddr0 int IRQ I2C 設(shè)置I2C中斷向量地址VICIntEnale Ox0200 使能I2C中斷 從模式下的數(shù)據(jù)發(fā)送 當(dāng)主機(jī)訪問從機(jī)時(shí) 若讀寫操作位為1 讀操作 則從機(jī)進(jìn)入從發(fā)送模式 向主機(jī)發(fā)送數(shù)據(jù) 并等待主機(jī)的應(yīng)答信號 從模式下的數(shù)據(jù)接收 當(dāng)主機(jī)訪問從機(jī)時(shí) 若讀寫操作位為0 寫操作 則從機(jī)進(jìn)入從接收模式 接收主機(jī)發(fā)送過來的數(shù)據(jù) 并產(chǎn)生應(yīng)答信號 六 附錄 RS 232標(biāo)準(zhǔn) RS 232標(biāo)準(zhǔn) 協(xié)議 的全稱是EIA RS 232標(biāo)準(zhǔn) 它是一個(gè)全雙工的通信標(biāo)準(zhǔn) 這些標(biāo)準(zhǔn)都是在RS 232標(biāo)準(zhǔn)的基礎(chǔ)上經(jīng)過改進(jìn)而形成的 RS 323C標(biāo)準(zhǔn)是美國EIA 電子工業(yè)聯(lián)合會(huì) 與BELL等公司一起開發(fā)的1969年公布的通信協(xié)議 它適合于數(shù)據(jù)傳輸速率在0 20000b s范圍內(nèi)的通信 這個(gè)標(biāo)準(zhǔn)對串行通信接口的有關(guān)問題都作了明確規(guī)定 RS 232C標(biāo)準(zhǔn)它早期被應(yīng)用在計(jì)算機(jī)與調(diào)制解調(diào)器 MODEM 的連接控制 MODEM再通過電話線進(jìn)行遠(yuǎn)距離數(shù)據(jù)傳輸 但是嚴(yán)格來講 RS232接口是DTE與DCE之間的接口 RS 232C標(biāo)準(zhǔn)對電器
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建筑工程師助理初級面試題集與解析
- 2025年人力資源管理師初級面試指南與預(yù)測題
- 廣東省茂名市電白區(qū)2024-2025學(xué)年高一下學(xué)期期中考試生物試題(解析版)
- 2025年焊接工程師考試技巧與模擬題解答
- 2025年壓力焊工藝深度解析面試常見問題及答案
- 2025年高級市場營銷經(jīng)理面試指南及模擬題
- 2025年綜合物資管理專業(yè)知識庫和模擬題集合
- 2025 年西安市二年級語文秋季開學(xué)摸底考 - 提高卷及答案(蘇教版)
- 2025 年鹽城市四年級數(shù)學(xué)秋季開學(xué)摸底考 - 基礎(chǔ)卷及答案(北師大版)
- 2025年?duì)I養(yǎng)師初級面試題及答案全收錄
- 同濟(jì)大學(xué)信紙
- 采氣工技能操作題庫
- 硫磺安全技術(shù)說明書MSDS
- 貴州省遵義市紅花崗區(qū)小升初數(shù)學(xué)試卷
- 貴州省新型農(nóng)村社會(huì)養(yǎng)老保險(xiǎn)經(jīng)辦規(guī)程
- 高壓氧治療相關(guān)知識
- 外科學(xué)麻醉專題知識講座培訓(xùn)課件
- 課程設(shè)計(jì)與評價(jià)
- 廣東省中山市20222022學(xué)年下學(xué)期期末考試八年級英語試卷
- 霍爾電流傳感器實(shí)訓(xùn)臺課件
- 2023年國藥控股股份有限公司招聘筆試題庫及答案解析
評論
0/150
提交評論