• slider image 442
  • slider image 477
  • slider image 479
  • slider image 480
  • slider image 481
  • slider image 482
:::


Browsing this Thread:   1 Anonymous Users






p33CK128MP505的AIVT設定
#1
高級會員
高級會員


查看用戶資訊
各位先進好
目前在學習AIVT的設定
小弟目前的想法是
Bootloader時候用備用向量表
等到進入APP時候 更動 INTCON2bits.AIVTEN 指引APP使用原本的向量表
所以 小弟在寫的時候
第一步驟是將
FSEC寄存器中的AIVTDIS的AIVTEN設定為1
#pragma config AIVTDIS = ON
第二在進入Bootloader時候要把INTCON2bits.AIVTEN 設定成備用的
到這邊應該都沒錯吧?
再來就是BSLIM的設定
可是我在Cconfigration bits 的設定視窗時候 他並沒有其他選項可以調整
參照:
最後我打開GLD檔的時候 發現結構裡面並沒有AIVT的位置設定 這樣是正確的嗎?
參照:
另外打開.H檔時候
發現AIVT的位置竟然是0x0
IVT位置是0x04
#define __AIVT_BASE 0x0
#define __AIVT_LENGTH 0x200

#define __RESET_BASE 0x0
#define __RESET_LENGTH 0x4

#define __IVT_BASE 0x4
#define __IVT_LENGTH 0x1fc

請問有大大能夠指導我一下嗎?
或者有相關的DataSheet可以參考嗎? 謝謝

發表於: 2021/3/29 16:56

Edited by 匿名小鬼 on 2021年03月29日 17:13:30
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: p33CK128MP505的AIVT設定
#2
高級會員
高級會員


查看用戶資訊
自己回覆一下自己好了
我使用的是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
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: p33CK128MP505的AIVT設定
#3
高級會員
高級會員


查看用戶資訊
後來有試出來把備用中斷向量擺放到0x200的方法
把原本
專案(右鍵)=>Properties=>點選XC16的xc16-ld選項 有個No Interrupt Vector Table 取消打勾
然後把剛剛加上去的
__AIVT_BASE
改成
__AIVT_BASE = 0x200;
就成功了

發表於: 2021/3/31 17:16
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------