找回密码
 立即注册
查看: 78|回复: 4

stc32g8k64 自己写isp和上位机软件如何映射中断向量表?

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-20 17:55:11
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-10-20 17:55:11 | 显示全部楼层 |阅读模式
请教一下,我的stc32g8k64如果自定义协议用自己的上位机软件如何映射中断,官方例程说是上位机软件内自动映射的,有没有相关资料的。不然只能用官方的上位机和协议无法满足需求的,isp和用户app的划分也不能自行更改了。
回复

使用道具 举报 送花

3

主题

1848

回帖

544

积分

等待验证会员

积分
544
发表于 2025-10-20 17:58:00 | 显示全部楼层
在使用 STC32G8K64 等带有 ISP(In-System Programming)功能的 MCU 时,若希望自行实现 ISP 协议及上位机软件,并对中断向量表进行映射,确实需要对整个启动流程、内存映射、中断机制有较为深入的理解。以下将从技术角度出发,详细阐述如何实现中断向量表的映射,以及如何在自定义 ISP 和上位机中实现这一机制。

一、理解中断向量表的基本原理

中断向量表(Interrupt Vector Table)是 MCU 启动后执行的第一批指令跳转地址集合,通常位于程序存储器的起始地址(如 0x0000)。每个中断源对应一个固定的地址偏移,MCU 在响应中断时会根据该表跳转到对应的中断服务函数。

对于 STC32G8K64 这类增强型 8051 内核 MCU,中断向量表的结构与标准 8051 类似,通常如下所示(以 16 字节对齐为例):

| 中断号 | 中断名称        | 地址偏移 |
|--------|----------------|----------|
| 0      | 复位中断        | 0x0000   |
| 1      | 外部中断 0      | 0x0003   |
| 2      | 定时器 0 中断   | 0x000B   |
| 3      | 外部中断 1      | 0x0013   |
| 4      | 定时器 1 中断   | 0x001B   |
| 5      | 串口中断        | 0x0023   |
| ...    | ...            | ...      |

二、ISP 与用户应用程序的内存划分

在自定义 ISP 方案中,通常将 MCU 的 Flash 划分为两个部分:
ISP 区域:负责接收上位机发送的固件、校验、写入 Flash,并跳转到用户程序。
用户 App 区域:运行用户应用程序,包含主逻辑和中断服务程序。

为实现中断向量表的映射,需要确保:

1. 用户程序的中断向量表被正确重定位到用户 App 区域的起始地址。
2. ISP 跳转时设置正确的中断向量基地址,以确保中断服务程序能被正确调用。

三、中断向量表的重定位方法

1. 编译器设置(以 Keil C51 为例)

Keil C51 编译器支持使用 REMAP 指令或链接器脚本(.lnk 文件)来指定中断向量表的起始地址。例如:
  1. c
  2. pragma REMAP 0x2000  // 将中断向量表重定位到 Flash 地址 0x2000
复制代码

或者在链接器配置中设置:
  1. txt
  2. CODE (0x2000)
复制代码

这样,编译器会将中断向量表生成在用户 App 区域的起始地址。

2. ISP 跳转前设置中断向量基地址寄存器

STC32G8K64 支持通过寄存器(如 INTVEC)设置中断向量表的基地址。在 ISP 跳转至用户程序之前,需手动设置该寄存器指向用户 App 的中断向量表起始地址。

例如:
  1. c
  2. // 假设用户程序起始于 0x2000
  3. INTVEC = 0x2000;
复制代码

注意:具体寄存器名称和操作方式请参考 STC32G8K64 数据手册。

四、自定义 ISP 与上位机中的中断向量处理

在自定义 ISP 实现中,需注意以下几点:

1. 固件格式设计

建议将固件文件格式设计为包含以下信息:
用户程序起始地址(用于设置 INTVEC)
中断向量表偏移地址
校验信息(如 CRC)
用户代码段数据

2. 上位机软件的处理逻辑

上位机在发送固件时,需将中断向量表的偏移地址告知 ISP 程序,以便 ISP 在跳转前设置正确的中断向量基地址。

例如:
  1. c
  2. // 接收到的固件头中包含中断向量偏移地址
  3. uint16t vectoroffset = getvectoroffsetfromfirmwareheader();
  4. // 设置中断向量基地址
  5. INTVEC = vectoroffset;
  6. // 跳转到用户程序入口
  7. ((void ()(void))userappentrypoint)();
复制代码

五、中断向量表映射的注意事项

1. 地址对齐:中断向量表必须按 16 字节对齐,否则可能导致跳转失败。
2. Flash 写保护:确保 ISP 不覆盖用户程序区域,尤其是中断向量表部分。
3. 跳转前关闭中断:在跳转前建议关闭全局中断,防止跳转过程中触发中断。
4. 兼容性处理:若用户程序可能运行在不同地址,需动态设置 INTVEC。

六、参考资料与建议
STC32G8K64 技术手册:详细说明了中断向量寄存器、Flash 分区、ISP 流程等内容。
Keil C51 编译器手册:提供中断向量重定位、链接器配置等信息。
STC 官方例程:虽然使用官方协议,但可参考其向量表映射和跳转实现方式。

七、结语

自定义 ISP 和上位机实现中断向量表映射,是实现灵活固件升级和功能扩展的关键步骤。通过合理配置编译器、设置中断向量寄存器、设计固件格式与上位机通信协议,完全可以脱离官方上位机限制,实现自主可控的升级流程。

如需进一步讨论具体实现细节(如跳转函数编写、CRC 校验算法、固件打包格式等),欢迎继续提问。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:226
  • 最近打卡:2025-11-02 10:12:27

792

主题

1万

回帖

2万

积分

管理员

积分
20149
发表于 2025-10-20 19:09:02 | 显示全部楼层
截图202510201908129262.jpg

深圳国芯人工智能有限公司-在线升级

请直接指出哪满足不了需求,我请研发来出主意
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-10-20 17:55:11
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-10-20 20:27:28 | 显示全部楼层
我需要能够更改APP的起始地址,范例上位机软件提供的是固定1000地址的。我可以手动把开头00H-003H的移到我指定位置,这样是可以启动的。能否在APP内程序内或者ISP程序内实现此功能。类似STM32的芯片我IAP跳转只需要更改中断向量表偏移量和KEIL编译内做相关设定即可。我们产品在现场是使用触摸屏类手持工具更新APP的,而且是同时广播对几百个芯片,上位机只发送无需应答,所以不能采用例程的上位机软件模式。我的设想是把跳转和中断向量表偏移放在芯片程序中,不知道能否实现,我暂时没有找到相关介绍。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:544
  • 最近打卡:2025-10-31 09:14:02
已绑定手机

48

主题

2300

回帖

8120

积分

论坛元老

积分
8120
发表于 2025-10-21 09:42:41 | 显示全部楼层
中断向量映射地址是在用户ISP程序里面修改:
截图202510210931353485.jpg

需要在上位机软件进行映射的是用户应用程序的跳转指令。
上位机软件打开应用程序升级文件时,读取地址0000H~0002H内容复制到1000H~1002H,然后升级时将地址1000H开始的数据发送给MCU进行升级。

官方提供的上位机升级软件,打开一次,关闭后会自动生成一个配置文件:
截图202510210938389741.jpg

可以添加/修改里面的配置参数调整设置,例如修改用户ISP大小调整用户ISP空间与用户APP空间的分配:
  1. [Settings]
  2. ;设置串口号(1~255),默认为1(COM1)
  3. Port=1
  4. ;设置串口波特率,默认115200
  5. Baudrate=115200
  6. ;设置用户ISP大小(512的整倍数),默认为4096(4K字节)
  7. IspSize=4096
  8. ;设置连接超时时间,默认为100ms
  9. ConnectTimeout=100
  10. ;设置擦除超时时间,默认为5000ms
  11. EraseTimeout=5000
  12. ;设置编程超时时间,默认为100ms
  13. ProgramTimeout=100
复制代码


USB接口上位机升级软件没有COM口选项,可以设置USB VID/PID:
  1. [Settings]
  2. USBVID=13503
  3. USBPID=65281
复制代码
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-11-2 20:20 , Processed in 0.136294 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表