国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

零基礎(chǔ)學(xué)FPGA (二十二) 舉一反三,基于SOPC的定時(shí)器中斷與串口數(shù)據(jù)收發(fā)

發(fā)布時(shí)間:2015-2-3 10:31    發(fā)布者:wp1981
關(guān)鍵詞: 小墨同學(xué) , 零基礎(chǔ) , FPGA , SOPC
作者:小墨同學(xué)

SOPC的課程已經(jīng)結(jié)束了,短短4天,要消化的內(nèi)容還真不少。今天又開(kāi)始了DDR2 SDRAM的課程,其實(shí)在我來(lái)北京之前他們已經(jīng)開(kāi)始SDRAM的課程了,想起我做SDRAM的時(shí)候,真的是好費(fèi)勁,又沒(méi)人指點(diǎn),代碼寫(xiě)了一大串,前仿真也做的差不多,后仿就不行了,有些東西不知道怎么解決,還涉及到時(shí)序約束這門(mén)聽(tīng)起來(lái)高大上的知識(shí),所以那段時(shí)間把我糾結(jié)的不輕。看樣子在我離開(kāi)北京之前這邊應(yīng)該是一直講SDRAM了,上課的是李凡老師,一個(gè)很和藹,很低調(diào)的老師,據(jù)說(shuō)已經(jīng)做了三四十年的工程師了,也是國(guó)內(nèi)頂尖的人物了。打算這幾天好好再學(xué)一下SDRAM,畢竟這東西用處很廣,前景也很明朗,估計(jì)消化掉SOPC的內(nèi)容后就要再開(kāi)始SDRAM的征程了,這樣在北京的20天也就不虛此行了~         

       今天我們講定時(shí)器中斷與串行口中斷,相信學(xué)過(guò)單片的朋友都用過(guò)這東西,對(duì)這東西也并不陌生,其實(shí)無(wú)非就是我們以前是對(duì)單片機(jī)編程,今天是對(duì)我們上次自己搭建的那個(gè)硬件系統(tǒng)進(jìn)行編程,即我們的NIOS II 處理器。

       和上個(gè)實(shí)驗(yàn)一樣,小墨同學(xué)先來(lái)跟大家學(xué)文檔,從文檔入手,做到每一條代碼都有根有據(jù)吧,這次還是要用到這個(gè)文檔 n2cpu_nii5v3,我會(huì)附在文章后面等會(huì),供大家下載

       我們先來(lái)看定時(shí)器這個(gè)核



            學(xué)IP核總要先知道這個(gè)核是干什么的吧,這里就和大家一起來(lái)啃啃英文,有一點(diǎn)還是提醒大家,文檔還是要看原版,即使你的英文不怎么好,也要試著去看,慢慢的就好了,我一般是喜歡開(kāi)著有道詞典一般看英文,遇到?jīng)]見(jiàn)過(guò)的詞鼠標(biāo)一點(diǎn)就出來(lái)了,個(gè)人感覺(jué)比較方便,大家也可以試一下

           我們先來(lái)總體看一下這個(gè)核,上面一段英文是說(shuō)呢,

          1、這個(gè)定時(shí)器核可以配置成32位或者64位的定時(shí)器,這個(gè)我們?cè)赟OPC builder里面已經(jīng)配置好了

          2、可以控制定時(shí)器的開(kāi)始,停止與復(fù)位

          3、有兩種計(jì)數(shù)模式,一種是計(jì)數(shù)一次就停止,一種是持續(xù)計(jì)數(shù)。其實(shí)我們的定時(shí)器是先讓我們?cè)O(shè)定一個(gè)初值給它,然后定時(shí)器從這個(gè)初值開(kāi)始遞減,第一種計(jì)數(shù)模式就是定時(shí)器從初值遞減到0時(shí)就停止計(jì)數(shù)了,第二種模式呢就是仍然繼續(xù)計(jì)數(shù)

         4、第四行就告訴了我們這個(gè)計(jì)數(shù)器的計(jì)數(shù)方式,即遞減式計(jì)數(shù)

         5、然后后面那幾行呢大概就是說(shuō)有幾種操作選項(xiàng),例如我們可以開(kāi)始或者關(guān)閉定時(shí)器中斷啊,開(kāi)啟看門(mén)狗定時(shí)器啊,當(dāng)定時(shí)器計(jì)滿一次數(shù)的時(shí)候發(fā)出一個(gè)高脈沖信號(hào)啊之類的   

         大概就是這些內(nèi)容了吧~



然后我們可以去看一下它的功能描述框圖這一頁(yè),加深一些理解



大概意思就是說(shuō),這個(gè)定時(shí)器核里包含了這么多寄存器,什么狀態(tài)寄存器,控制寄存器之類的,當(dāng)我們開(kāi)啟寄存器的時(shí)候,count里會(huì)自動(dòng)載入我們?cè)O(shè)定的初值,開(kāi)始計(jì)數(shù),當(dāng)計(jì)滿一次的時(shí)候會(huì)產(chǎn)生一個(gè)中斷給CPU,知道大體意思就行,具體的到后面寄存器視圖再仔細(xì)看他們的具體功能

下面我們需要看一下它的software files這一頁(yè),知道要用到哪些頭文件



重點(diǎn)來(lái)了,我們主要的任務(wù)就是看這個(gè)定時(shí)器核的寄存器映射視圖,這也就直接關(guān)系到我們代碼的編寫(xiě)



       上面一段話大體意思是說(shuō)啊,我們?nèi)绻褂昧擞布橄髮酉到y(tǒng)庫(kù)提供給NIOS II處理器的這樣一個(gè)標(biāo)準(zhǔn)配置的話,我們就沒(méi)必要去訪問(wèn)定時(shí)器這個(gè)核的寄存器了,一般來(lái)說(shuō)這個(gè)寄存器映射圖是準(zhǔn)們給我們編寫(xiě)器件驅(qū)動(dòng)用的
       前面一段話我理解的不是很好,不敢在這里忽悠大家,但是我們的目的就是編寫(xiě)器件驅(qū)動(dòng)嘛,所以我們還是可以使用的
       下面就可以看到這個(gè)核為我們提供的幾組寄存器了,大體瀏覽一下,主要是看下面的功能介紹

先來(lái)看這兩個(gè)寄存器



     狀態(tài)寄存器的第零位呢是TO位,TO從字面上理解就是timeout,即時(shí)間溢出嘛,就是說(shuō)當(dāng)我們計(jì)數(shù)器計(jì)到0 的時(shí)候TO位會(huì)自動(dòng)被置1,如果我們想要置0的話需要在狀態(tài)寄存器里手動(dòng)清0,這也就解釋了為什么我們后面的代碼每次進(jìn)入中斷以后為什么要清TO位了

     RUN寄存器可以通過(guò)上面的解釋大概說(shuō),RUN寄存器是用來(lái)指示定時(shí)器當(dāng)前狀態(tài)的一個(gè)數(shù)據(jù)位,即當(dāng)寄存器工作的時(shí)候他被設(shè)置為1,否則設(shè)置為0 ,而且這一位不受你往狀態(tài)寄存器寫(xiě)數(shù)據(jù)的影響。

    控制寄存器呢大概就是開(kāi)啟關(guān)閉中斷,開(kāi)始計(jì)數(shù)或者停止計(jì)數(shù)之類的,大家可以自己消化英文,下面的period_n寄存器無(wú)非就是我們?cè)O(shè)置一個(gè)初值給它,大家也可以自己看

    好了,需要看的也就這些了,下面就是我們根據(jù)我們從文檔中獲得的知識(shí)去編寫(xiě)我們的代碼了



首先就是定義頭文件么

system.h即我們硬件系統(tǒng)生成時(shí)產(chǎn)生的,里面定義了我們各種模塊的基址啊,位寬啊之類的,下面就是我們要操作的七段數(shù)碼管的基址及相關(guān)信息,,有了基址我們才能訪問(wèn)到數(shù)碼所在的PIO,才能給他賦相應(yīng)的值



其他那些頭文件無(wú)非就是定時(shí)器核的寄存器頭文件和數(shù)據(jù)類型頭文件,還有IO操作的的一些函數(shù)的頭文件

      代碼部分其實(shí)很簡(jiǎn)單,先是設(shè)置定時(shí)器中斷,每進(jìn)入一次中斷將TO位清零,這里用到IOWR這個(gè)函數(shù)就是IO頭文件里面定義的一個(gè)函數(shù)之一,用來(lái)對(duì)狀態(tài)寄存器進(jìn)行寫(xiě)數(shù)據(jù),然后就是數(shù)據(jù)自加1,由于我們?cè)趕opc builder里面設(shè)置的時(shí)候設(shè)置的定時(shí)器定時(shí)單位是ms,所以我們計(jì)數(shù)1000次也就是1S了

主函數(shù)部分就是上來(lái)調(diào)用函數(shù)對(duì)數(shù)碼管的位選和片選端初始化,將定時(shí)器中斷打開(kāi),這些都沒(méi)什么,要注意一點(diǎn)就是中斷函數(shù)的注冊(cè),即 alt_irq_register(TIMER_IRQ,TIMER_BASE,handle_Timer0_interrupts);

就是我們給我的定時(shí)器一個(gè)定義,即我們要訪問(wèn)的定時(shí)器的基址,和要命名的名字,只有注冊(cè)了中斷,我們才能進(jìn)入中斷函數(shù)

好了,我們可以暫時(shí)跳過(guò)調(diào)試這一環(huán)節(jié),因?yàn)楣こ瘫容^簡(jiǎn)單,我們可以直接下板



在下板的過(guò)程中大家可能會(huì)遇到這樣下載失敗的情況
No Nios II target connection paths were located. Check connections and that a Nios II .sof is downloaded.
注意要按順序來(lái)做,一般是先下載硬件配置文件.SOF,再對(duì)軟件進(jìn)行全編譯,然后再下載一般就可以解決了


下面我們?cè)賮?lái)看UART這個(gè)核



       先來(lái)總體來(lái)看一下這個(gè)核,大體上是說(shuō)啊,這個(gè)UART核可以通過(guò)Avalon總線,作為Avalon總線的一個(gè)從機(jī),來(lái)實(shí)現(xiàn)FPGA與外圍器件之間的通信,這個(gè)核服從RS232時(shí)序協(xié)議,提供了可手動(dòng)配置的波特率啊,奇偶校驗(yàn)位啊,停止位啊之類的數(shù)據(jù)位,控制數(shù)據(jù)流向啊,允許設(shè)計(jì)者調(diào)用系統(tǒng)給出的必要的一些函數(shù)啊之類的

再大體看一下功能框圖



和之前的差不多,核的內(nèi)部也是一系列寄存器,時(shí)鐘進(jìn)來(lái)之后進(jìn)入divisor ,進(jìn)行波特率的配置,然后通過(guò)控制寄存器啊,狀態(tài)寄存器啊控制數(shù)據(jù)的讀寫(xiě)功能,大體上是這個(gè)意思,具體還要看后面的寄存器映射視圖

太過(guò)詳細(xì)的東西這里不做介紹,留給大家慢慢消化,主要是來(lái)看一下它的寄存器映射視圖



這里有6組寄存器,包括什么讀寫(xiě)寄存器,控制寄存器,狀態(tài)寄存器,波特率設(shè)置寄存器之類的,具體功能大同小異,簡(jiǎn)單來(lái)看一下

先來(lái)看一下讀寄存器吧



大體上是說(shuō)啊,這個(gè)讀寄存器可以保存住來(lái)自RXD口輸入過(guò)來(lái)的數(shù)據(jù),當(dāng)一個(gè)新的字符完全進(jìn)入這個(gè)寄存器之后啊,那么狀態(tài)寄存器的rrdy位將會(huì)自動(dòng)置1,當(dāng)讀寄存器中的數(shù)據(jù)被讀出的時(shí)候,rrdy位自動(dòng)置0,如果當(dāng)讀寄存器中的數(shù)值還沒(méi)有被讀完,又有新字符輸入的話,那么就會(huì)發(fā)生錯(cuò)誤,狀態(tài)寄存器的的roe位自動(dòng)置1,新的數(shù)據(jù)將會(huì)覆蓋原有的數(shù)據(jù),對(duì)讀寄存器寫(xiě)數(shù)據(jù)是沒(méi)有影響的,大體上就是這個(gè)意思了

狀態(tài)寄存器位數(shù)太多,這里就不一一講解,大體上是說(shuō),當(dāng)發(fā)生各種錯(cuò)誤,例如什么奇偶校驗(yàn)位錯(cuò)誤,停止位錯(cuò)誤之類的,接收發(fā)送錯(cuò)誤之類的,還有指示讀寫(xiě)寄存器狀態(tài)的,當(dāng)有數(shù)據(jù)的時(shí)候置1,空的時(shí)候置0之類的,大家還是自己去理解

控制寄存器主要是控制中斷,包括這種中斷,這里我們只需要用到發(fā)送中斷和接收中斷,其他的大家可以自己看一下



代碼部分呢主先來(lái)看一下初始化部分



由于我們?cè)O(shè)置的NIOS II處理器是32位的,因此我們的寄存器偏移地址根據(jù)基址也就知道了,即32/8 = 4,

先對(duì)控制寄存器操作,打開(kāi)就收發(fā)送使能端,control寄存器是第5個(gè)寄存器,偏移為12
IOWR_16DIRECT(UART_BASE,12,0xc0);

狀態(tài)寄存器清零,狀態(tài)寄存器偏移為8
IOWR_16DIRECT(UART_BASE,8, 0x0);

注冊(cè)中斷函數(shù)
alt_irq_register(UART_IRQ,UART_BASE,Uart_rx_ISR);


接收中斷部分主要就是將狀態(tài)寄存器的數(shù)值讀回,判斷狀態(tài)寄存器的rrdy位的狀態(tài),如果是1的話那么表明數(shù)據(jù)接收完畢,可以讀了,然后將數(shù)據(jù)保存起來(lái),將接收數(shù)據(jù)位置1表明我們已經(jīng)收到數(shù)據(jù)了



以后小墨同學(xué)的文章將在EDNchina和北京至芯科技官方技術(shù)論壇同時(shí)更新,至芯科技的官方技術(shù)論壇也有很多的資料供大家下載,里面也有小墨的專題板塊,希望廣大網(wǎng)友和愛(ài)好者的大力支持~
http://www.fpgaw.com/
小墨同學(xué)《零基礎(chǔ)學(xué)FPGA》學(xué)習(xí)專版  一個(gè)大三學(xué)生學(xué)習(xí)之路的真實(shí)記錄
http://www.fpgaw.com/thread-78527-1-1.html
下面是至芯科技官方網(wǎng)站,夏宇聞教授和那里的老師都超好的~有意愿接受FPGA培訓(xùn)的可以找工作人員咨詢
http://www.zxopen.com/
       以后小墨同學(xué)的教程會(huì)跟這款開(kāi)發(fā)板配套,想跟小墨同學(xué)一起學(xué)習(xí),一起進(jìn)步的的可以考慮一下購(gòu)買(mǎi)一塊開(kāi)發(fā)板,畢竟學(xué)習(xí)要舍得投資嘛,下面是開(kāi)發(fā)板淘寶鏈接
http://item.taobao.com/item.htm? ... &abbucket=13#detail


本文地址:http://www.qingdxww.cn/thread-145321-1-1.html     【打印本頁(yè)】

本站部分文章為轉(zhuǎn)載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé);文章版權(quán)歸原作者及原出處所有,如涉及作品內(nèi)容、版權(quán)和其它問(wèn)題,我們將根據(jù)著作權(quán)人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評(píng)論 登錄 | 立即注冊(cè)

廠商推薦

  • Microchip視頻專區(qū)
  • 想要避免發(fā)生災(zāi)難,就用MPLAB® SiC電源仿真器!
  • 無(wú)線充電基礎(chǔ)知識(shí)及應(yīng)用培訓(xùn)教程3
  • PIC18-Q71系列MCU概述
  • 基于CEC1712實(shí)現(xiàn)的處理器SPI FLASH固件安全彈性方案培訓(xùn)教程
  • 貿(mào)澤電子(Mouser)專區(qū)

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號(hào) | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日本一区久久 | 国产欧美日韩中文字幕 | 亚洲成片观看四虎永久 | 亚洲区一区| 可以免费看黄的网址 | 亚洲图片在线播放 | h肉动漫在线观看免费资源 h肉动漫在线观看高清 | 人人草视频在线观看 | 亚洲人成www在线播放 | 国内自拍成人网在线视频 | 欧美高清一区二区三 | 国产精品入口免费视频 | 久草视频资源在线 | 91精品视频免费观看 | 欧美香蕉 | 老司机久久精品视频 | 99在线观看免费视频 | yese夜色资源网 | 成人高清在线观看播放 | 国产成人综合亚洲欧美天堂 | 天天se天天cao综合网蜜芽 | 亚洲欧美国产一区二区三区 | 国产精品福利在线观看免费不卡 | 日日插天天干 | 一区二区三区欧美日韩国产 | 黄色片视频网站 | 精品一区二区三区在线观看 | 四虎影院免费视频 | 精品黑人一区二区三区 | 日韩成人在线免费视频 | 久视频在线观看久视频 | 麻豆国内精品久久久久久 | 欧美日韩综合在线视频免费看 | 91麻豆高清国产在线播放 | 久久精品久久久久 | 久久国产美女免费观看精品 | 一区精品麻豆经典 | 97成人在线| 日本护士xxxjapanese | 自拍 欧美 在线 综合 另类 | 欧日韩在线不卡视频 |