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


Browsing this Thread:   1 Anonymous Users






PIC18F45K80在BOOTLOADER中使用中斷的問題
#1
新會員
新會員


查看用戶資訊
HI All

目前我在PIC18F45K80中做了一個BOOTLOADER

並在其中使用了中斷

當燒錄完跳到AP後,只要發生中斷就還是會

跳到BOOTLOADER的中斷去執行,當然整體的工作會變得很怪

請問我該如何從BOOTLOADER跳到AP時一併更改AP的中斷向量呢?

整體的配置如下

BOOTLOADER: 0x0000~0x1FFF

AP:0x2000~0x8000

因為在BOOTLOADER中使用了LIN的模組

看起來是需要中斷來做一些事情,輪巡恐會有一些其他的問題存在

以上,還望不吝賜教,謝謝

發表於: 2020/6/13 12:46
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
#2
版主
版主


查看用戶資訊
如果是使用 MCC 所產生的 Bootloader 可以在 MCC 裡直接設定 APP 應用程式的起始位址。

Bootloader 的 APP 程式起始位置是可以設定的,如你的 APP 是從 0x2000 開始,那 Bootloader 的中斷向量轉移就必須在 0x0008 及 0x0018 這兩個中斷執行位址利用 goto 轉移到 0x2008 及 0x2018 這兩個位址來讓 APP 執行中斷函式。

至於 APP 就需要在 Linker 設定裡講整個程式在位移到 0x2000 的起始位址,可以用 Code Offset = 0x2000 的設定將 APP 的編譯從 0x2000 開始編譯。並在 0x2008 及 0x2018 利用嵌入式組語方式跳到高優先權及低優先權中斷函式。

底下是一個中斷轉移的範例程式參考看看:
#include <xc.h>

void HighISR();
void LowISR();

    
REMAPPED_HIGH_INTERRUPT_VECTOR 0x2008
void Remapped_High_ISR 
(void)
{
      
#asm goto HighISR #endasm
}

REMAPPED_LOW_INTERRUPT_VECTOR 0x2018
void Remapped_Low_ISR 
(void)
{
     
#asm goto LowISR #endasm
}

void interrupt HighISR(void)             // 高優先權中斷函數
{
    if (
TMR0IE && TMR0IF)
    {
        
WriteTimer0(65536-488);     // 500mS Period, 500mS/4uS/256 = 488
        
LATDbits.LATD0 = !LATDbits.LATD0;
        
TMR0IF=0;
    }
}

void interrupt low_priority LowISR(void)     //  低優先權中斷函數
{
    if (
TMR1IF && TMR1IE)
    {
        
WriteTimer1(65536-7812);    // 250mS Period, 250mS/4uS/8 = 7812
        
LATDbits.LATD7 = !LATDbits.LATD7;
        
TMR1IF 0;
    }
}

發表於: 2020/6/15 10:24

Edited by Ryang on 2020年06月15日 10:41:46
Edited by Ryang on 2020年06月15日 11:17:47
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
#3
新會員
新會員


查看用戶資訊
HI Sir:

你好

先把名詞定義一下

BOOT = BOOTLOADER (0x0000~0x1FFF)

APP = 主程式(0x2000~0x7FFF)

我在BOOT中也有用到中斷副程式

因為沒有額外的設定,所以他應該是直接用了

0x0008和0x0018這兩個中斷向量

但我在跳到APP時,APP的中斷也會跳到BOOT的中斷

我想請教的是我們如何在BOOT跳到APP之後

讓APP執行他自己的中斷副程式

您幫我整理的這兩段CODE,請問這是要放在BOOT中嗎?

感覺是要放在BOOTLOADER中,讓他跳到0x2008和0x2018

但這樣原本BOOT的中斷副程式怎麼辦呢?

抱歉這部分我不是很清楚,還望不吝指導

謝謝

發表於: 2020/6/15 11:18
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: PIC18F45K80在BOOTLOADER中使用中斷的問題
#4
版主
版主


查看用戶資訊
1. 在 Bootloader 程式裡,0x0001 及 0x0018 的中斷進入為址必須填入 goto 0x2008 及 goto 0x2018 的指令。如果你是用 MCC 來產生的 Bootloader 則可以在 MCC 下直接設定 APP 中斷的執行位址。如圖一所示:

2. 上面所附的範例程式是用在 APP 端的中斷程式。第一階段是在程式位址 0x2008 的地方強行遷入一個 goto HighISR 的組合語言。
#asm goto HighISR #endasm
而void interrupt HighISR(void) 是宣告一個高優先權中斷函數,函數名稱為 HighISR( ) 以接收在 0x2008 跳過來的執行。

所以你的 Bootloader 與 APP 的關係是:

APP 發生中斷後,程式跳入Bootloader 的 0x0008 處執行高優先權中斷。又因此處放了 goto 0x2008 的指令,所以又會跳轉到 APP 的 0x2008 位址執行在跳到 APP 的中斷函數 HighISR( ) 執行中斷程式。

Attach file:



jpg  (0.00 KB)


發表於: 2020/6/15 11:28
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... ]

教育訓練中心

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