TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430F2618:MSP430X 自定义引导加载程序中断向量针对1M 存储器大小溢出

Guru**** 2048860 points
Other Parts Discussed in Thread: MSP430F2618
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/977958/msp430f2618-msp430x-custom-bootloader-interrupt-vector-overflows-for-1m-memory-size

器件型号:MSP430F2618

我当前为 MSP430F2618工作的引导加载程序在64K 的存储器大小和 MSP430X 的指令集下工作正常。 将存储器大小更改为1MB 不会让函数指针跳转到所需的中断矢量。 引导加载程序的中断矢量在 crt0.asm 下定义如下:

;跳转例程以将中断从加载程序传递到 Loadee
.code
#define LOADEE_INT_VEC 0xE9C0
jumpvec0:
MOV LOADEE_INT_VEC+0、PC
跳向1:
MOV LOADEE_INT_VEC+2、PC
跳向2:
MOV LOADEE_INT_VEC+4、PC
跳向3:
MOV LOADEE_INT_VEC+6、PC
跳向4:
MOV LOADEE_INT_VEC+8、PC
跳向5:
MOV LOADEE_INT_VEC+10、PC
跳向6:
MOV LOADEE_INT_VEC+12、PC
跳向7:
MOV LOADEE_INT_VEC+14、PC
跳向8:
MOV LOADEE_INT_VEC+16、PC
跳向9:
MOV LOADEE_INT_VEC+18、PC
跳向10:
MOV LOADEE_INT_VEC+20、PC
跳向11:
MOV LOADEE_INT_VEC+22、PC
跳向12:
MOV LOADEE_INT_VEC+24、PC
跳向13:
MOV LOADEE_INT_VEC+26、PC
跳向14:
MOV LOADEE_INT_VEC+28、PC
跳向15:
MOV LOADEE_INT_VEC+30、PC
跳向16:
MOV LOADEE_INT_VEC+32、PC
跳向17:
MOV LOADEE_INT_VEC+34、PC
跳向18:
MOV LOADEE_INT_VEC+36、PC
跳向19:
MOV LOADEE_INT_VEC+38、PC
跳向20:
MOV LOADEE_INT_VEC+40、PC
跳向21:
MOV LOADEE_INT_VEC+42、PC
跳向22:
MOV LOADEE_INT_VEC+44、PC
跳向23:
MOV LOADEE_INT_VEC+46、PC
跳向24:
MOV LOADEE_INT_VEC+48、PC
跳向25:
MOV LOADEE_INT_VEC+50、PC
跳向26:
MOV LOADEE_INT_VEC+52、PC
跳向27:
MOV LOADEE_INT_VEC+54、PC
跳向28:
MOV LOADEE_INT_VEC+56、PC
跳向29:
MOV LOADEE_INT_VEC+58、PC
跳向30:
MOV LOADEE_INT_VEC+60、PC


#ifndef __NOVECTORS
;复位矢量
向量
保持

DW jumpvec0
DW 跳向1
DW 跳转2
DW 跳转3
DW 跳转4
DW 跳转矢量5
DW 跳转6
DW 跳转7
DW 跳转8
DW 跳转9
DW 跳转10
DW 跳转11
DW 跳向12
DW 跳转13
DW 跳转14
DW 跳转15
DW 跳转16
DW 跳转17
DW 跳转18
DW 跳转19
DW jumpvec20
DW jumpvec21
DW jumpvec22
DW 跳转23
DW jumpvec24
DW 跳转25
DW 跳转26
DW 跳转27
DW 跳转28
DW 跳转29
DW 跳转30
DW __reset
#endif

//#ifndef __NOVECTORS
//;复位向量
// .vectors
// .keep
// org) RESET_VECTOR
// DW _reset
//#endif 

从引导加载程序跳转到程序的代码如下所示:

#define bootloader_vector 0xE9FE
typedef void (* fnptr)(void); 
unsigned int addr =*(unsigned int *) bootloader_vector; fnptr JAF =(fnptr) addr;

(*JAF)();//条件检查内部

该程序是在用于 MSP430的 CrossStudio 中编写的。 当我将存储器大小设置为64K 时、在.hzx 下定义的 intvec 指示 jumpvecX 定义的地址从82fc 开始到 fafc、并在语句 DW __reset 的00ff 结束。 地址增加1024。 即82fc、86fc、8afc 等。 将存储器大小更改为1M 会初始化 c8fc 中的 jumpvecX 定义、递增1024、jumpvec14会溢出16位地址。 尽管我使用的是 MSP430X 和1M 存储器大小、但 INTVEC 大小的限制限制为64K 意味着无法将所有 jumpvec 位置添加到其中。 我如何解决这个问题?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Arunt、

    对延误表示歉意。  您是否能够使 BSL 正常工作?  我不确定您的1M 是什么意思、但听起来您想移动中断矢量表吗?   我进行了一些搜索、并找到了该主题的主题: https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/343580?Relocating-the-vector-table-in-MSP430 

    请告诉我它是否有用。   

    谢谢、

    JD

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    JD、您好!

    问题现已解决。 乘以1M、我的意思是大于64K 的存储器大小。 当使用 MSP430指令集和64K 存储器大小时、具有地址的函数指针正常工作。 但是、使用 MSP430X 指令集和1M 存储器大小时 、不能为函数指针分配任意地址、并且在为1M 地址空间构建时调用该地址。 因此、添加了汇编文件以跳转到引导加载程序矢量。 解决了该问题。

    谢谢、

    Arun