Re: p33CK128MP505的AIVT設定
|
||||
---|---|---|---|---|
高級會員
|
自己回覆一下自己好了
我使用的是IC是 PIC33CK128MP505系列的 開發環境是MPLABX 配合XC16 1.70版本 發現在使用上跟以往很不太一樣 在XC16他會自己幫你配置IVT跟AIVT的位置 如果想要取消他自動配置功能要去 專案(右鍵)=>Properties=>點選XC16的xc16-ld選項 有個No Interrupt Vector Table 勾選以後他就會取消自動配置 這時你就要去找出GLD檔案自己去配置Interrup的位置 在gld檔案找到 __IVT_BASE = 0x4; 看看有沒有一行指令 __AIVT_BASE = 之類的 如果沒有就需要自己補上 __AIVT_BASE = 0x800; 再來是找到 #if __XC16_VERSION 小於 1026 這邊把程式改成 #if __XC16_VERSION 大於 1026 再來是在你的程式開頭加上這三行 #pragma config AIVTDIS = ON #pragma config BSEN = ON #pragma config BSLIM = 0x1FFD 再來就是在你程式裡面加上 INTCON2bits.AIVTEN = 1; 這個是當你要使用備用中斷時候才開啟 以上是我更改的過程 但其實我自己不了解的的是Datasheer的公式 我怎麼算都算不出我需要擺放的位置 [(BSLIM[12:0] – 1) x 0x800] 根據前面的#pragma config BSLIM = 0x1FFD 我測試出來他是擺放在0x800的位置 (0x1FFD-1)x 0x800 怎麼都不會是在0x800 這點我比較納悶 第二 假設是(2-1)x 0x800 = 0x800 那就代表 備用中斷的位置在 0x800 主要中斷位置在0x04 長度是0x1FC 這中間 0x200=>0x800整整浪費掉 這點我也不太懂 為什麼會這樣設計 有前備可以指導一下該怎麼擺放到0x200的位置嗎? 我是有試過備用中斷程式碼放到了0x200可是程式確不能執行
發表於: 2021/3/31 14:44
|
|||
|
Re: p33CK128MP505的AIVT設定
|
||||
---|---|---|---|---|
高級會員
|
後來有試出來把備用中斷向量擺放到0x200的方法
把原本 專案(右鍵)=>Properties=>點選XC16的xc16-ld選項 有個No Interrupt Vector Table 取消打勾 然後把剛剛加上去的 __AIVT_BASE 改成 __AIVT_BASE = 0x200; 就成功了
發表於: 2021/3/31 17:16
|
|||
|