亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

LPC2000 UART串口使用心得

系統 1580 0

針對zgpswh在串口使用上的一些難題,總結個人在前一階段的理解,比較片面,不對的地方請高手指正。

1、LPC2000 系列芯片的串口的接收模塊包括接收緩沖寄存器和移位寄存器。接收的數據進入移位寄存器后經移位處理并行傳入緩沖寄存器,事實上,UART的FIFO是一個硬件環形的緩沖隊列,物理上不可尋址,不可見,僅U0RBR這個FIFO出口可見。U0RBR就是接收FIFO的第一位。FIFO的長度是可設的,也叫觸發點,低于這個長度的字符串不會引起中斷,但在實際應用中,不可能串口讀入的數據長度總為觸發點值的整數倍,為此,引入了CTI即字符接收超時中斷,當有不足觸發點值規定的字符串讀入時,將引起中斷,其與串口的RDA中斷具有相同的優先級,并會同時被使能。
那么,LPC2000的UART機制是如何判斷串口讀入數據的一次性容量呢?如果接收FIFO里已經有了1個字符,它可在一定的時間內等待下一個字符的讀入,也就是說,不超過一定的時間就不會觸發CTI中斷,這個時間是在本次通訊協議設置的前提下,接收3.5到4.5個字符所用的時間。比如,需串口接收GPRS數傳狀態成功建立后的返回值“Ok_Info_WaitingForData”22個字符組成的字符串,FIFO觸發點設置為14,在前14個字符讀入之后,立即觸發RDA中斷,跳轉至RDA中斷服務子程序將這14個字符放入我所預設的緩沖區內,接著,后8個字符讀入,這時CPU并不立刻中斷,它需等待在本次串口通訊協議設置的前提下,接收3.5到4.5個字符所用的時間(需根據波特率和幀格式具體計算),這個時間一到,立刻觸發CTI中斷,換句話說,超過這個時間的等待,CPU就認為一個完整的字符串已經結束了,這才是字符串超時的真正含義。
???
2、為什么要用FIFO呢?我個人覺得,主要是為了提高串口的利用效率,同時可以避免一定程度上的丟包。比如,在用串口發送FIFO中斷時,觸發深度設為8,那么接收中斷發生的條件是,FIFO里有了8個字符,但不是8個字節,因為串口異步通信的協議中,會加幀頭和幀尾,但外表上還是以字符為單位。發送時,則是當FIFO里不滿8個字符的時候要中斷一次,所以利用FIFO發送時也要自建一個用來串口發送的緩沖池,發送中斷服務程序里要做的就是從這個發送緩沖區里取數送進FIFO里,沿用上面的假設,觸發深度設為8,一次性向FIFO里送15個字符,在送入第一批15個字符之后串口開始自動發送,當FIFO里只有7個字符時,立即發生中斷,因此,在發送中斷服務程序里要設個計數指針作為跳出中斷的上限,這個上限不是8而是15。我認為,如果要發揮fifo的高效率,就必須把自設的緩沖區作成一個環狀鏈表,即,不需要做移位處理使自設的緩沖區剩余的數據頂頭。ZLG有詳細的基于隊列思想的例程。

3、個人覺得,當FIFO的觸發深度設為1時和不用FIFO時的效果是一樣的。

4、串口發送時,推薦第一個字符要在打開串口中斷前送,否則可能中斷只來一次。比如下面的這個用串口中斷發送字符串的函數為:
/****************************************************************************************************
** 函數名稱 :UART0_SendStr()
** 函數功能 :向串口發送字符串
** 入口參數 :str??? 要發送的字符串的首地址指針
** 出口參數 :無
*****************************************************************************************************
void UART0_SendStr( CHAR const? *str)
{?
???? Str_Send_P = str;
???? U0THR = *Str_Send_P++;
???? U0IER |= 0x02;????? //開發送中斷?????
}
在中斷發送程序中的處理為:
SWITCH(IIR & 0x0e)
?????? {
???????? case 0x02:????????????? //利用串口發送中斷,發送字符串
????????????? if((*Str_Send_P)!='\0')
????????????? U0THR = *Str_Send_P++;
????????????? else
????????????? U0IER &= (~0x02);?? //關發送中斷
????????????? break;
這種做法的道理不太明白,但實驗證明,不這么做就只發一次


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/liukun321/archive/2010/05/31/5636748.aspx

LPC2000 UART串口使用心得


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日本一区二区网站 | 四虎在线永久视频观看 | 日本黄色网址视频 | 999成人国产精品 | 国产乱码精品一区二区三上 | 国内主播大秀福利视频在线看 | 一本大道久久香蕉成人网 | 亚洲欧美日韩不卡一区二区三区 | 久久青草国产免费观看 | 四虎午夜剧场 | 模特啪啪 | 伊人久久99亚洲精品久久频 | a级爱爱视频| 久久青青草原精品国产麻豆 | 一级毛片免费在线播放 | 爱爱免费观看高清视频在线播放 | 欧美色精品天天在线观看视频 | 久久精热 | 成人激情小视频 | 天天操天天爽天天射 | 69香蕉视频| 九九精品视频一区在线 | 波多野结衣中文一区二区免费 | 久久国产精品广西柳州门 | 久久久精品免费热线观看 | 久久成人国产精品免费 | 亚洲国产一区二区a毛片日本 | 国产大尺度福利视频在线 | 一级啪啪片 | 国产亚洲自在精品久久 | 日日摸夜夜添夜夜添毛片 | 青青草国产三级精品三级 | 国产精品在线观看 | 四虎免费影院在线播放 | 国产v片成人影院在线观看 国产v视频 | 亚洲国产精品网站久久 | 日日草天天干 | 亚洲欧美日韩一区超高清 | 久久精品国产久精国产80cm | 毛片电 | 看黄网站在线观看 |