一起学nRF51xx 4 - int
前言
上一節(jié)我們講過(guò)nrf51822的gpiote功能,利用GPIOte的Event,中斷,和Task做了一個(gè)簡(jiǎn)單的用按鍵控制LED的實(shí)驗(yàn),其間用到了中斷,涉及到中斷的開(kāi)啟,優(yōu)先級(jí)設(shè)置,中斷響應(yīng)函數(shù)的實(shí)現(xiàn)等等,
nrf51822 cpu使用的是M0核心,其中斷的控制也是由內(nèi)部的NVIC模塊進(jìn)行控制,關(guān)于NVIC的詳細(xì)操作如果有STM32開(kāi)發(fā)基礎(chǔ)的話(huà),這邊基本也不會(huì)有會(huì)什么障礙,本節(jié)將會(huì)以上一講gpiote的代碼為例,重點(diǎn)給大家介紹始何在 nrf51822 中實(shí)現(xiàn)中斷操作。
?
示例詳解
基于硬件平臺(tái): nrf51822ek_tm開(kāi)發(fā)板。
?
?
本示例所用的最小系統(tǒng)板原理圖:
?
?
工程名為nrfxx-Int確認(rèn)后按下圖選擇芯片為nrf51822_xxAA->ok
在彈出的對(duì)話(huà)框中勾選CMSIS中的CORE;Device中的Startup(后面有nrf51 Series字樣的);在nrf_device中勾選nrf_gpio, nrf_gpiote,nrf_delay.
?
OK之后工程自動(dòng)生成如下代碼:
新建一個(gè)空白文檔,保存為main.c,并加入工程中:
配置工程,選擇使用MicroLIB庫(kù),可以減小程序體積:
加入NRF51定義,并選擇化等級(jí)3,可以減小程序體積,但仿真運(yùn)行時(shí)可能會(huì)出現(xiàn)與代碼順序不一致現(xiàn)象:
?
調(diào)試工具選擇J-LINK,并將接口設(shè)置為SW口勾選下載程序后自動(dòng)復(fù)位及運(yùn)行:
?
?
?
下面重點(diǎn)解析一下實(shí)現(xiàn)中斷響應(yīng)的相關(guān)代碼:
首先我們用到的是GPIOTE模塊及其中斷,打開(kāi)arm_startup_nrf51.s文件,找到GPIOTE模塊對(duì)應(yīng)的中斷響應(yīng)函數(shù)GPIOTE_IRQHandler:
?
復(fù)制GPIOTE_IRQHandler到main.c ,并補(bǔ)齊形參及返回值,加入響應(yīng)代碼:
然后在main函數(shù)使能中斷:
????? NVIC_SetPriority(GPIOTE_IRQn, 1);???????????? // 設(shè)置中斷優(yōu)先級(jí)
????? NVIC_ClearPendingIRQ(GPIOTE_IRQn);??????? ?? // 清除中斷標(biāo)志
????? NVIC_EnableIRQ(GPIOTE_IRQn);?????????????? // 使能中斷 – 必需
????? __enable_irq();????????????????????????????? // 開(kāi)啟全局中斷 – 默認(rèn)也是開(kāi)的
?
其中GPIOTE_IRQn為 GPIOTE_IRQHandler 中將 “Handler”變成”n”即可,上面四行代碼中,其實(shí)就第三行是必需,其它三行在本例為非必需代碼。
?
按下按鍵,程序成功進(jìn)入到中斷函數(shù)中:
可以看到NRF中斷的操作與STM32 的mcu很類(lèi)似,就三步,開(kāi)總中斷,使能指定中斷,實(shí)現(xiàn)中斷響應(yīng)函數(shù),其它模塊的中斷操作也是類(lèi)似。
?
OK,本期實(shí)驗(yàn)完成!下期見(jiàn)!同時(shí)如果大家有什么疑問(wèn)或是有想了解的其它內(nèi)容,也歡迎大家留言!!最后喜歡這個(gè)公眾號(hào)的同學(xué)們記得加關(guān)注了,會(huì)有不定期技術(shù)干貨推出!!
文中源碼資料下載,在公眾號(hào)里給十三發(fā)消息:
下載|一起學(xué)nRF51xx 4
?
關(guān)注十三公眾號(hào)
?
總結(jié)
以上是生活随笔為你收集整理的一起学nRF51xx 4 - int的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一起学nRF51xx 3 - gpio
- 下一篇: 一起学nRF51xx 5 - ppi