使用汇编宏指令判断GD32并使用Flash中断向量表
This commit is contained in:
parent
7be0562645
commit
2e3b853fa1
113
Debug.cpp
113
Debug.cpp
|
@ -1,4 +1,4 @@
|
||||||
#include "Sys.h"
|
#include "Sys.h"
|
||||||
// 仅用于调试使用的一些函数实现,RTM不需要
|
// 仅用于调试使用的一些函数实现,RTM不需要
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
|
@ -79,5 +79,116 @@ void assert_failed(uint8_t* file, uint32_t line)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void ShowFault(uint exception)
|
||||||
|
{
|
||||||
|
// 显示异常详细信息
|
||||||
|
int i;
|
||||||
|
if(exception==3)
|
||||||
|
{
|
||||||
|
// 0xE000ED2C
|
||||||
|
uint n = *(uint*)(SCB_BASE + 0x2C);
|
||||||
|
debug_printf("\r\n硬件错误 %d ", n);
|
||||||
|
if(n & (1<<1))
|
||||||
|
{
|
||||||
|
debug_printf("在取向量时发生\r\n");
|
||||||
|
}
|
||||||
|
else if(n & (1u<<30))
|
||||||
|
{
|
||||||
|
debug_printf("是总线fault,存储器管理fault 或是用法fault 上访的结果\r\n");
|
||||||
|
}
|
||||||
|
else if(n & (1u<<31))
|
||||||
|
{
|
||||||
|
debug_printf("因调试事件而产生\r\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(exception==5)
|
||||||
|
{
|
||||||
|
i = *(byte*)(SCB_BASE + 0x29);
|
||||||
|
#ifdef STM32F10X
|
||||||
|
debug_printf("\r\nBus Fault %d 0x%08x: \r\n", i, SCB->BFAR);
|
||||||
|
#endif
|
||||||
|
if(i & (1<<0))
|
||||||
|
{
|
||||||
|
debug_printf("IBUSERR 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。 5. 在异常处理期间,入栈的PC值被破坏了\r\n"); // 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。例如,异常在向量建立之前就发生了,或者加载的是用于传统ARM内核的可执行映像 5. 在异常处理期间,入栈的PC值被破坏了
|
||||||
|
}
|
||||||
|
else if(i & (1<<1))
|
||||||
|
{
|
||||||
|
debug_printf("PRECISERR 在数据访问期间的总线错误。通过BFAR可以获取具体的地址。发生fault的原因同上。\r\n"); // 在数据访问期间的总线错误。通过BFAR可以获取具体的地址。发生fault的原因同上。
|
||||||
|
}
|
||||||
|
else if(i & (1<<2))
|
||||||
|
{
|
||||||
|
debug_printf("IMPRECISERR 与设备之间传送数据的过程中发生总线错误。可能是因为设备未经初始化而引起;或者在用户级访问了特权级的设备,或者传送的数据单位尺寸不能为设备所接受。此时,有可能是LDM/STM指令造成了非精确总线fault。\r\n"); // 与设备之间传送数据的过程中发生总线错误。可能是因为设备未经初始化而引起;或者在用户级访问了特权级的设备,或者传送的数据单位尺寸不能为设备所接受。此时,有可能是LDM/STM指令造成了非精确总线fault。
|
||||||
|
}
|
||||||
|
else if(i & (1<<3))
|
||||||
|
{
|
||||||
|
debug_printf("UNSTKERR (自动)出栈期间出错。如果没有发生过STKERR,则最可能的就是在异常处理期间把SP的值破坏了\r\n"); // (自动)出栈期间出错。如果没有发生过STKERR,则最可能的就是在异常处理期间把SP的值破坏了
|
||||||
|
}
|
||||||
|
else if(i & (1<<4))
|
||||||
|
{
|
||||||
|
debug_printf("STKERR (自动)入栈期间出错 1. 堆栈指针的值被破坏 2. 堆栈用量太大,到达了未定义存储器的区域 3. PSP未经初始化就使用\r\n"); // (自动)入栈期间出错 1. 堆栈指针的值被破坏 2. 堆栈用量太大,到达了未定义存储器的区域 3. PSP未经初始化就使用
|
||||||
|
}
|
||||||
|
else if(i & (1<<5))
|
||||||
|
{
|
||||||
|
debug_printf("BFARVALID 表示BFAR有效\r\n"); // 表示BFAR有效
|
||||||
|
}
|
||||||
|
//debug_printf("\r\n");
|
||||||
|
}
|
||||||
|
else if(exception==4)
|
||||||
|
{
|
||||||
|
i = *(byte*)(SCB_BASE + 0x28);
|
||||||
|
#ifdef STM32F10X
|
||||||
|
debug_printf("\r\nMemManage Fault %d 0x%08x: \r\n", i, SCB->MMFAR);
|
||||||
|
#endif
|
||||||
|
if(i & (1<<0))
|
||||||
|
{
|
||||||
|
debug_printf("IACCVIOL 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。 5. 在异常处理期间,入栈的PC值被破坏了\r\n"); // 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。例如,异常在向量建立之前就发生了,或者加载的是用于传统ARM内核的可执行映像 5. 在异常处理期间,入栈的PC值被破坏了
|
||||||
|
}
|
||||||
|
else if(i & (1<<1))
|
||||||
|
{
|
||||||
|
debug_printf("DACCVIOL 数据内存访问保护违例。一般是访问非法内存位置所致。可以注意筛查野指针问题。\r\n"); // 内存访问保护违例。这是MPU发挥作用的体现。常常是用户应用程序企图访问特权级region所致
|
||||||
|
}
|
||||||
|
else if(i & (1<<3))
|
||||||
|
{
|
||||||
|
debug_printf("MUNSTKERR 出栈时发生错误 1. 异常服务例程破坏了堆栈指针 2. 异常服务例程更改了MPU配置\r\n"); // 出栈时发生错误 1. 异常服务例程破坏了堆栈指针 2. 异常服务例程更改了MPU配置
|
||||||
|
}
|
||||||
|
else if(i & (1<<4))
|
||||||
|
{
|
||||||
|
debug_printf("MSTKERR 入栈时发生错误 1. 堆栈指针的值被破坏 2. 堆栈容易过大,已经超出MPU允许的region范围\r\n"); // 入栈时发生错误 1. 堆栈指针的值被破坏 2. 堆栈容易过大,已经超出MPU允许的region范围
|
||||||
|
}
|
||||||
|
else if(i & (1<<7))
|
||||||
|
{
|
||||||
|
debug_printf("MMARVALID 表示MMAR有效\r\n"); // 表示MMAR有效
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(exception==6)
|
||||||
|
{
|
||||||
|
i = *(byte*)(SCB_BASE + 0x2A);
|
||||||
|
debug_printf("\r\nUsage Fault %d: \r\n", i);
|
||||||
|
if(i & (1<<0))
|
||||||
|
{
|
||||||
|
debug_printf("UNDEFINSTR 执行的指令其编码是未定义的——解码不能\r\n"); // 执行的指令其编码是未定义的——解码不能
|
||||||
|
}
|
||||||
|
else if(i & (1<<1))
|
||||||
|
{
|
||||||
|
debug_printf("INVSTATE 试图切入ARM状态\r\n"); // 试图切入ARM状态
|
||||||
|
}
|
||||||
|
else if(i & (1<<2))
|
||||||
|
{
|
||||||
|
debug_printf("INVPC 在异常返回时试图非法地加载EXC_RETURN到PC\r\n"); // 在异常返回时试图非法地加载EXC_RETURN到PC。包括非法的指令,非法的上下文以及非法的EXC_RETURN值。The return PC指向的指令试图设置PC的值
|
||||||
|
}
|
||||||
|
else if(i & (1<<3))
|
||||||
|
{
|
||||||
|
debug_printf("NOCP 企图执行一个协处理器指令。引发此fault的指令可以从入栈的PC读取\r\n"); // 企图执行一个协处理器指令。引发此fault的指令可以从入栈的PC读取
|
||||||
|
}
|
||||||
|
else if(i & (1<<4))
|
||||||
|
{
|
||||||
|
debug_printf("UNALIGNED 当UNALIGN_TRP置位时发生未对齐访问。引发此fault的指令可以从入栈的PC读取\r\n"); // 当UNALIGN_TRP置位时发生未对齐访问。引发此fault的指令可以从入栈的PC读取
|
||||||
|
}
|
||||||
|
else if(i & (1<<5))
|
||||||
|
{
|
||||||
|
debug_printf("DIVBYZERO 表示除法运算时除数为零。引发此fault的指令可以从入栈的PC读取\r\n"); // 表示除法运算时除数为零(只有在DIV_0_TRP置位时才会发生)。引发此fault的指令可以从入栈的PC读取
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
159
Interrupt.cpp
159
Interrupt.cpp
|
@ -16,9 +16,6 @@
|
||||||
*/
|
*/
|
||||||
TInterrupt Interrupt;
|
TInterrupt Interrupt;
|
||||||
|
|
||||||
void OnHandler();
|
|
||||||
void FaultHandler(); // 错误处理程序
|
|
||||||
|
|
||||||
// 真正的向量表 64k=0x10000
|
// 真正的向量表 64k=0x10000
|
||||||
#if VEC_TABLE_ON_RAM
|
#if VEC_TABLE_ON_RAM
|
||||||
#ifdef STM32F0
|
#ifdef STM32F0
|
||||||
|
@ -108,7 +105,7 @@ bool TInterrupt::Activate(short irq, InterruptCallback isr, void* param)
|
||||||
|
|
||||||
short irq2 = irq + 16; // exception = irq + 16
|
short irq2 = irq + 16; // exception = irq + 16
|
||||||
#if VEC_TABLE_ON_RAM
|
#if VEC_TABLE_ON_RAM
|
||||||
_Vectors[irq2] = OnHandler;
|
_Vectors[irq2] = UserHandler;
|
||||||
#endif
|
#endif
|
||||||
Vectors[irq2] = isr;
|
Vectors[irq2] = isr;
|
||||||
Params[irq2] = param;
|
Params[irq2] = param;
|
||||||
|
@ -218,7 +215,7 @@ __asm uint GetIPSR()
|
||||||
bx lr
|
bx lr
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnHandler()
|
void UserHandler()
|
||||||
{
|
{
|
||||||
uint num = GetIPSR();
|
uint num = GetIPSR();
|
||||||
//if(num >= VectorySize) return;
|
//if(num >= VectorySize) return;
|
||||||
|
@ -242,158 +239,8 @@ void FaultHandler()
|
||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
// 显示异常详细信息
|
ShowFault(exception);
|
||||||
int i;
|
|
||||||
if(exception==3)
|
|
||||||
{
|
|
||||||
// 0xE000ED2C
|
|
||||||
uint n = *(uint*)(SCB_BASE + 0x2C);
|
|
||||||
debug_printf("\r\n硬件错误 %d ", n);
|
|
||||||
if(n & (1<<1))
|
|
||||||
{
|
|
||||||
debug_printf("在取向量时发生\r\n");
|
|
||||||
}
|
|
||||||
else if(n & (1u<<30))
|
|
||||||
{
|
|
||||||
debug_printf("是总线fault,存储器管理fault 或是用法fault 上访的结果\r\n");
|
|
||||||
}
|
|
||||||
else if(n & (1u<<31))
|
|
||||||
{
|
|
||||||
debug_printf("因调试事件而产生\r\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(exception==5)
|
|
||||||
{
|
|
||||||
i = *(byte*)(SCB_BASE + 0x29);
|
|
||||||
#ifdef STM32F10X
|
|
||||||
debug_printf("\r\nBus Fault %d 0x%08x: \r\n", i, SCB->BFAR);
|
|
||||||
#endif
|
|
||||||
if(i & (1<<0))
|
|
||||||
{
|
|
||||||
debug_printf("IBUSERR 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。 5. 在异常处理期间,入栈的PC值被破坏了\r\n"); // 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。例如,异常在向量建立之前就发生了,或者加载的是用于传统ARM内核的可执行映像 5. 在异常处理期间,入栈的PC值被破坏了
|
|
||||||
}
|
|
||||||
else if(i & (1<<1))
|
|
||||||
{
|
|
||||||
debug_printf("PRECISERR 在数据访问期间的总线错误。通过BFAR可以获取具体的地址。发生fault的原因同上。\r\n"); // 在数据访问期间的总线错误。通过BFAR可以获取具体的地址。发生fault的原因同上。
|
|
||||||
}
|
|
||||||
else if(i & (1<<2))
|
|
||||||
{
|
|
||||||
debug_printf("IMPRECISERR 与设备之间传送数据的过程中发生总线错误。可能是因为设备未经初始化而引起;或者在用户级访问了特权级的设备,或者传送的数据单位尺寸不能为设备所接受。此时,有可能是LDM/STM指令造成了非精确总线fault。\r\n"); // 与设备之间传送数据的过程中发生总线错误。可能是因为设备未经初始化而引起;或者在用户级访问了特权级的设备,或者传送的数据单位尺寸不能为设备所接受。此时,有可能是LDM/STM指令造成了非精确总线fault。
|
|
||||||
}
|
|
||||||
else if(i & (1<<3))
|
|
||||||
{
|
|
||||||
debug_printf("UNSTKERR (自动)出栈期间出错。如果没有发生过STKERR,则最可能的就是在异常处理期间把SP的值破坏了\r\n"); // (自动)出栈期间出错。如果没有发生过STKERR,则最可能的就是在异常处理期间把SP的值破坏了
|
|
||||||
}
|
|
||||||
else if(i & (1<<4))
|
|
||||||
{
|
|
||||||
debug_printf("STKERR (自动)入栈期间出错 1. 堆栈指针的值被破坏 2. 堆栈用量太大,到达了未定义存储器的区域 3. PSP未经初始化就使用\r\n"); // (自动)入栈期间出错 1. 堆栈指针的值被破坏 2. 堆栈用量太大,到达了未定义存储器的区域 3. PSP未经初始化就使用
|
|
||||||
}
|
|
||||||
else if(i & (1<<5))
|
|
||||||
{
|
|
||||||
debug_printf("BFARVALID 表示BFAR有效\r\n"); // 表示BFAR有效
|
|
||||||
}
|
|
||||||
//debug_printf("\r\n");
|
|
||||||
}
|
|
||||||
else if(exception==4)
|
|
||||||
{
|
|
||||||
i = *(byte*)(SCB_BASE + 0x28);
|
|
||||||
#ifdef STM32F10X
|
|
||||||
debug_printf("\r\nMemManage Fault %d 0x%08x: \r\n", i, SCB->MMFAR);
|
|
||||||
#endif
|
|
||||||
if(i & (1<<0))
|
|
||||||
{
|
|
||||||
debug_printf("IACCVIOL 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。 5. 在异常处理期间,入栈的PC值被破坏了\r\n"); // 取指访问违例 1. 内存访问保护违例。常常是用户应用程序企图访问特权级region。在这种情况下,入栈的PC给出的地址,就是产生问题的代码之所在 2. 跳转到不可执行指令的 regions 3. 异常返回时,使用了无效的EXC_RETURN值 4. 向量表中有无效的向量。例如,异常在向量建立之前就发生了,或者加载的是用于传统ARM内核的可执行映像 5. 在异常处理期间,入栈的PC值被破坏了
|
|
||||||
}
|
|
||||||
else if(i & (1<<1))
|
|
||||||
{
|
|
||||||
debug_printf("DACCVIOL 数据内存访问保护违例。一般是访问非法内存位置所致。可以注意筛查野指针问题。\r\n"); // 内存访问保护违例。这是MPU发挥作用的体现。常常是用户应用程序企图访问特权级region所致
|
|
||||||
}
|
|
||||||
else if(i & (1<<3))
|
|
||||||
{
|
|
||||||
debug_printf("MUNSTKERR 出栈时发生错误 1. 异常服务例程破坏了堆栈指针 2. 异常服务例程更改了MPU配置\r\n"); // 出栈时发生错误 1. 异常服务例程破坏了堆栈指针 2. 异常服务例程更改了MPU配置
|
|
||||||
}
|
|
||||||
else if(i & (1<<4))
|
|
||||||
{
|
|
||||||
debug_printf("MSTKERR 入栈时发生错误 1. 堆栈指针的值被破坏 2. 堆栈容易过大,已经超出MPU允许的region范围\r\n"); // 入栈时发生错误 1. 堆栈指针的值被破坏 2. 堆栈容易过大,已经超出MPU允许的region范围
|
|
||||||
}
|
|
||||||
else if(i & (1<<7))
|
|
||||||
{
|
|
||||||
debug_printf("MMARVALID 表示MMAR有效\r\n"); // 表示MMAR有效
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(exception==6)
|
|
||||||
{
|
|
||||||
i = *(byte*)(SCB_BASE + 0x2A);
|
|
||||||
debug_printf("\r\nUsage Fault %d: \r\n", i);
|
|
||||||
if(i & (1<<0))
|
|
||||||
{
|
|
||||||
debug_printf("UNDEFINSTR 执行的指令其编码是未定义的——解码不能\r\n"); // 执行的指令其编码是未定义的——解码不能
|
|
||||||
}
|
|
||||||
else if(i & (1<<1))
|
|
||||||
{
|
|
||||||
debug_printf("INVSTATE 试图切入ARM状态\r\n"); // 试图切入ARM状态
|
|
||||||
}
|
|
||||||
else if(i & (1<<2))
|
|
||||||
{
|
|
||||||
debug_printf("INVPC 在异常返回时试图非法地加载EXC_RETURN到PC\r\n"); // 在异常返回时试图非法地加载EXC_RETURN到PC。包括非法的指令,非法的上下文以及非法的EXC_RETURN值。The return PC指向的指令试图设置PC的值
|
|
||||||
}
|
|
||||||
else if(i & (1<<3))
|
|
||||||
{
|
|
||||||
debug_printf("NOCP 企图执行一个协处理器指令。引发此fault的指令可以从入栈的PC读取\r\n"); // 企图执行一个协处理器指令。引发此fault的指令可以从入栈的PC读取
|
|
||||||
}
|
|
||||||
else if(i & (1<<4))
|
|
||||||
{
|
|
||||||
debug_printf("UNALIGNED 当UNALIGN_TRP置位时发生未对齐访问。引发此fault的指令可以从入栈的PC读取\r\n"); // 当UNALIGN_TRP置位时发生未对齐访问。引发此fault的指令可以从入栈的PC读取
|
|
||||||
}
|
|
||||||
else if(i & (1<<5))
|
|
||||||
{
|
|
||||||
debug_printf("DIVBYZERO 表示除法运算时除数为零。引发此fault的指令可以从入栈的PC读取\r\n"); // 表示除法运算时除数为零(只有在DIV_0_TRP置位时才会发生)。引发此fault的指令可以从入栈的PC读取
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
while(true);
|
while(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !VEC_TABLE_ON_RAM
|
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
void NMI_Handler() { FaultHandler(); }
|
|
||||||
void HardFault_Handler() { FaultHandler(); }
|
|
||||||
void MemManage_Handler() { FaultHandler(); }
|
|
||||||
void BusFault_Handler() { FaultHandler(); }
|
|
||||||
void UsageFault_Handler() { FaultHandler(); }
|
|
||||||
void SVC_Handler() { OnHandler(); }
|
|
||||||
void PendSV_Handler() { OnHandler(); }
|
|
||||||
void SysTick_Handler() { OnHandler(); }
|
|
||||||
void WWDG_IRQHandler() { OnHandler(); }
|
|
||||||
void PVD_IRQHandler() { OnHandler(); }
|
|
||||||
void RTC_IRQHandler() { OnHandler(); }
|
|
||||||
void FLASH_IRQHandler() { OnHandler(); }
|
|
||||||
void RCC_IRQHandler() { OnHandler(); }
|
|
||||||
void EXTI0_1_IRQHandler() { OnHandler(); }
|
|
||||||
void EXTI2_3_IRQHandler() { OnHandler(); }
|
|
||||||
void EXTI4_15_IRQHandler() { OnHandler(); }
|
|
||||||
void TS_IRQHandler() { OnHandler(); }
|
|
||||||
void DMA1_Channel1_IRQHandler() { OnHandler(); }
|
|
||||||
void DMA1_Channel2_3_IRQHandler() { OnHandler(); }
|
|
||||||
void DMA1_Channel4_5_IRQHandler() { OnHandler(); }
|
|
||||||
void ADC1_COMP_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM1_BRK_UP_TRG_COM_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM1_CC_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM2_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM3_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM6_DAC_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM14_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM15_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM16_IRQHandler() { OnHandler(); }
|
|
||||||
void TIM17_IRQHandler() { OnHandler(); }
|
|
||||||
void I2C1_IRQHandler() { OnHandler(); }
|
|
||||||
void I2C2_IRQHandler() { OnHandler(); }
|
|
||||||
void SPI1_IRQHandler() { OnHandler(); }
|
|
||||||
void SPI2_IRQHandler() { OnHandler(); }
|
|
||||||
void USART1_IRQHandler() { OnHandler(); }
|
|
||||||
void USART2_IRQHandler() { OnHandler(); }
|
|
||||||
void CEC_IRQHandler() { OnHandler(); }
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -87,4 +87,11 @@ private:
|
||||||
uint _state;
|
uint _state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
void FaultHandler(void);
|
||||||
|
void UserHandler(void);
|
||||||
|
void ShowFault(uint exception);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -98,4 +98,44 @@ extern "C"
|
||||||
/* Wait till PLL is used as system clock source */
|
/* Wait till PLL is used as system clock source */
|
||||||
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL) { }
|
while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL) { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !VEC_TABLE_ON_RAM
|
||||||
|
void NMI_Handler() { FaultHandler(); }
|
||||||
|
void HardFault_Handler() { FaultHandler(); }
|
||||||
|
void MemManage_Handler() { FaultHandler(); }
|
||||||
|
void BusFault_Handler() { FaultHandler(); }
|
||||||
|
void UsageFault_Handler() { FaultHandler(); }
|
||||||
|
void SVC_Handler() { UserHandler(); }
|
||||||
|
void PendSV_Handler() { UserHandler(); }
|
||||||
|
void SysTick_Handler() { UserHandler(); }
|
||||||
|
void WWDG_IRQHandler() { UserHandler(); }
|
||||||
|
void PVD_IRQHandler() { UserHandler(); }
|
||||||
|
void RTC_IRQHandler() { UserHandler(); }
|
||||||
|
void FLASH_IRQHandler() { UserHandler(); }
|
||||||
|
void RCC_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI0_1_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI4_15_IRQHandler() { UserHandler(); }
|
||||||
|
void TS_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel1_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel4_5_IRQHandler() { UserHandler(); }
|
||||||
|
void ADC1_COMP_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_BRK_UP_TRG_COM_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_CC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM2_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM3_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM6_DAC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM14_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM15_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM16_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM17_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C1_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C2_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI1_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI2_IRQHandler() { UserHandler(); }
|
||||||
|
void USART1_IRQHandler() { UserHandler(); }
|
||||||
|
void USART2_IRQHandler() { UserHandler(); }
|
||||||
|
void CEC_IRQHandler() { UserHandler(); }
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,4 +165,46 @@ extern "C"
|
||||||
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
|
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !VEC_TABLE_ON_RAM
|
||||||
|
/*void NMI_Handler() { FaultHandler(); }
|
||||||
|
void HardFault_Handler() { FaultHandler(); }
|
||||||
|
void MemManage_Handler() { FaultHandler(); }
|
||||||
|
void BusFault_Handler() { FaultHandler(); }
|
||||||
|
void UsageFault_Handler() { FaultHandler(); }*/
|
||||||
|
/*void SVC_Handler() { UserHandler(); }
|
||||||
|
void DebugMon_Handler() { UserHandler(); }
|
||||||
|
void PendSV_Handler() { UserHandler(); }
|
||||||
|
void SysTick_Handler() { UserHandler(); }
|
||||||
|
|
||||||
|
void WWDG_IRQHandler() { UserHandler(); }
|
||||||
|
void PVD_IRQHandler() { UserHandler(); }
|
||||||
|
void RTC_IRQHandler() { UserHandler(); }
|
||||||
|
void FLASH_IRQHandler() { UserHandler(); }
|
||||||
|
void RCC_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI0_1_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI4_15_IRQHandler() { UserHandler(); }
|
||||||
|
void TS_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel1_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel4_5_IRQHandler() { UserHandler(); }
|
||||||
|
void ADC1_COMP_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_BRK_UP_TRG_COM_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_CC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM2_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM3_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM6_DAC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM14_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM15_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM16_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM17_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C1_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C2_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI1_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI2_IRQHandler() { UserHandler(); }
|
||||||
|
void USART1_IRQHandler() { UserHandler(); }
|
||||||
|
void USART2_IRQHandler() { UserHandler(); }
|
||||||
|
void CEC_IRQHandler() { UserHandler(); }*/
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,4 +131,44 @@ extern "C"
|
||||||
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
|
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !VEC_TABLE_ON_RAM
|
||||||
|
void NMI_Handler() { FaultHandler(); }
|
||||||
|
void HardFault_Handler() { FaultHandler(); }
|
||||||
|
void MemManage_Handler() { FaultHandler(); }
|
||||||
|
void BusFault_Handler() { FaultHandler(); }
|
||||||
|
void UsageFault_Handler() { FaultHandler(); }
|
||||||
|
void SVC_Handler() { UserHandler(); }
|
||||||
|
void PendSV_Handler() { UserHandler(); }
|
||||||
|
void SysTick_Handler() { UserHandler(); }
|
||||||
|
void WWDG_IRQHandler() { UserHandler(); }
|
||||||
|
void PVD_IRQHandler() { UserHandler(); }
|
||||||
|
void RTC_IRQHandler() { UserHandler(); }
|
||||||
|
void FLASH_IRQHandler() { UserHandler(); }
|
||||||
|
void RCC_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI0_1_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void EXTI4_15_IRQHandler() { UserHandler(); }
|
||||||
|
void TS_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel1_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel2_3_IRQHandler() { UserHandler(); }
|
||||||
|
void DMA1_Channel4_5_IRQHandler() { UserHandler(); }
|
||||||
|
void ADC1_COMP_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_BRK_UP_TRG_COM_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM1_CC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM2_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM3_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM6_DAC_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM14_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM15_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM16_IRQHandler() { UserHandler(); }
|
||||||
|
void TIM17_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C1_IRQHandler() { UserHandler(); }
|
||||||
|
void I2C2_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI1_IRQHandler() { UserHandler(); }
|
||||||
|
void SPI2_IRQHandler() { UserHandler(); }
|
||||||
|
void USART1_IRQHandler() { UserHandler(); }
|
||||||
|
void USART2_IRQHandler() { UserHandler(); }
|
||||||
|
void CEC_IRQHandler() { UserHandler(); }
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
; 栈空间意义不大,SmartOS将会重新设定到RAM最大值,这里分配的栈空间仅用于TSys构造函数重新指定栈之前
|
||||||
|
Stack_Size EQU 0x00000400
|
||||||
|
|
||||||
|
AREA STACK, NOINIT, READWRITE, ALIGN=3
|
||||||
|
Stack_Mem SPACE Stack_Size
|
||||||
|
__initial_sp
|
||||||
|
|
||||||
|
; 因为SmartOS需要大量分配内存,这里设定一个较大的值,在内存充足时尽可能分配到最大 。堆空间不足时malloc将引发异常
|
||||||
|
Heap_Size EQU 0x00004000
|
||||||
|
|
||||||
|
AREA HEAP, NOINIT, READWRITE, ALIGN=3
|
||||||
|
__heap_base
|
||||||
|
Heap_Mem SPACE Heap_Size
|
||||||
|
__heap_limit
|
||||||
|
|
||||||
|
PRESERVE8
|
||||||
|
THUMB
|
||||||
|
|
||||||
|
|
||||||
|
; Vector Table Mapped to Address 0 at Reset
|
||||||
|
AREA RESET, DATA, READONLY
|
||||||
|
EXPORT __Vectors
|
||||||
|
EXPORT __Vectors_End
|
||||||
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
|
__Vectors DCD __initial_sp ; Top of Stack
|
||||||
|
DCD Reset_Handler ; Reset Handler
|
||||||
|
|
||||||
|
IF :DEF:GD32
|
||||||
|
IMPORT FaultHandler
|
||||||
|
IMPORT UserHandler
|
||||||
|
DCD FaultHandler ; NMI Handler
|
||||||
|
DCD FaultHandler ; Hard Fault Handler
|
||||||
|
DCD FaultHandler ; MPU Fault Handler
|
||||||
|
DCD FaultHandler ; Bus Fault Handler
|
||||||
|
DCD FaultHandler ; Usage Fault Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD UserHandler ; SVCall Handler
|
||||||
|
DCD UserHandler ; Debug Monitor Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD UserHandler ; PendSV Handler
|
||||||
|
DCD UserHandler ; SysTick Handler
|
||||||
|
|
||||||
|
; External Interrupts
|
||||||
|
DCD UserHandler ; Window Watchdog
|
||||||
|
DCD UserHandler ; PVD through EXTI Line detect
|
||||||
|
DCD UserHandler ; Tamper
|
||||||
|
DCD UserHandler ; RTC
|
||||||
|
DCD UserHandler ; Flash
|
||||||
|
DCD UserHandler ; RCC
|
||||||
|
DCD UserHandler ; EXTI Line 0
|
||||||
|
DCD UserHandler ; EXTI Line 1
|
||||||
|
DCD UserHandler ; EXTI Line 2
|
||||||
|
DCD UserHandler ; EXTI Line 3
|
||||||
|
DCD UserHandler ; EXTI Line 4
|
||||||
|
DCD UserHandler ; DMA1 Channel 1
|
||||||
|
DCD UserHandler ; DMA1 Channel 2
|
||||||
|
DCD UserHandler ; DMA1 Channel 3
|
||||||
|
DCD UserHandler ; DMA1 Channel 4
|
||||||
|
DCD UserHandler ; DMA1 Channel 5
|
||||||
|
DCD UserHandler ; DMA1 Channel 6
|
||||||
|
DCD UserHandler ; DMA1 Channel 7
|
||||||
|
DCD UserHandler ; ADC1 & ADC2
|
||||||
|
DCD UserHandler ; USB High Priority or CAN1 TX
|
||||||
|
DCD UserHandler ; USB Low Priority or CAN1 RX0
|
||||||
|
DCD UserHandler ; CAN1 RX1
|
||||||
|
DCD UserHandler ; CAN1 SCE
|
||||||
|
DCD UserHandler ; EXTI Line 9..5
|
||||||
|
DCD UserHandler ; TIM1 Break
|
||||||
|
DCD UserHandler ; TIM1 Update
|
||||||
|
DCD UserHandler ; TIM1 Trigger and Commutation
|
||||||
|
DCD UserHandler ; TIM1 Capture Compare
|
||||||
|
DCD UserHandler ; TIM2
|
||||||
|
DCD UserHandler ; TIM3
|
||||||
|
DCD UserHandler ; TIM4
|
||||||
|
DCD UserHandler ; I2C1 Event
|
||||||
|
DCD UserHandler ; I2C1 Error
|
||||||
|
DCD UserHandler ; I2C2 Event
|
||||||
|
DCD UserHandler ; I2C2 Error
|
||||||
|
DCD UserHandler ; SPI1
|
||||||
|
DCD UserHandler ; SPI2
|
||||||
|
DCD UserHandler ; USART1
|
||||||
|
DCD UserHandler ; USART2
|
||||||
|
DCD UserHandler ; USART3
|
||||||
|
DCD UserHandler ; EXTI Line 15..10
|
||||||
|
DCD UserHandler ; RTC Alarm through EXTI Line
|
||||||
|
DCD UserHandler ; USB Wakeup from suspend
|
||||||
|
DCD UserHandler ; TIM8 Break
|
||||||
|
DCD UserHandler ; TIM8 Update
|
||||||
|
DCD UserHandler ; TIM8 Trigger and Commutation
|
||||||
|
DCD UserHandler ; TIM8 Capture Compare
|
||||||
|
DCD UserHandler ; ADC3
|
||||||
|
DCD UserHandler ; FSMC
|
||||||
|
DCD UserHandler ; SDIO
|
||||||
|
DCD UserHandler ; TIM5
|
||||||
|
DCD UserHandler ; SPI3
|
||||||
|
DCD UserHandler ; UART4
|
||||||
|
DCD UserHandler ; UART5
|
||||||
|
DCD UserHandler ; TIM6
|
||||||
|
DCD UserHandler ; TIM7
|
||||||
|
DCD UserHandler ; DMA2 Channel1
|
||||||
|
DCD UserHandler ; DMA2 Channel2
|
||||||
|
DCD UserHandler ; DMA2 Channel3
|
||||||
|
DCD UserHandler ; DMA2 Channel4 & Channel5
|
||||||
|
ENDIF
|
||||||
|
__Vectors_End
|
||||||
|
|
||||||
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
|
; Reset handler
|
||||||
|
Reset_Handler PROC
|
||||||
|
EXPORT Reset_Handler [WEAK]
|
||||||
|
IMPORT __main
|
||||||
|
IMPORT SystemInit
|
||||||
|
LDR R0, =SystemInit
|
||||||
|
BLX R0
|
||||||
|
LDR R0, =__main
|
||||||
|
BX R0
|
||||||
|
ENDP
|
||||||
|
|
||||||
|
ALIGN
|
||||||
|
|
||||||
|
;*******************************************************************************
|
||||||
|
; User Stack and Heap initialization
|
||||||
|
;*******************************************************************************
|
||||||
|
EXPORT __initial_sp
|
||||||
|
EXPORT __heap_base
|
||||||
|
EXPORT __heap_limit
|
||||||
|
|
||||||
|
END
|
|
@ -25,11 +25,11 @@ __heap_limit
|
||||||
|
|
||||||
__Vectors DCD __initial_sp ; Top of Stack
|
__Vectors DCD __initial_sp ; Top of Stack
|
||||||
DCD Reset_Handler ; Reset Handler
|
DCD Reset_Handler ; Reset Handler
|
||||||
DCD NMI_Handler ; NMI Handler
|
DCD FaultHandler ; NMI Handler
|
||||||
DCD HardFault_Handler ; Hard Fault Handler
|
DCD FaultHandler ; Hard Fault Handler
|
||||||
DCD MemManage_Handler ; MPU Fault Handler
|
DCD FaultHandler ; MPU Fault Handler
|
||||||
DCD BusFault_Handler ; Bus Fault Handler
|
DCD FaultHandler ; Bus Fault Handler
|
||||||
DCD UsageFault_Handler ; Usage Fault Handler
|
DCD FaultHandler ; Usage Fault Handler
|
||||||
DCD 0 ; Reserved
|
DCD 0 ; Reserved
|
||||||
DCD 0 ; Reserved
|
DCD 0 ; Reserved
|
||||||
DCD 0 ; Reserved
|
DCD 0 ; Reserved
|
||||||
|
@ -117,204 +117,14 @@ Reset_Handler PROC
|
||||||
LDR R0, =__main
|
LDR R0, =__main
|
||||||
BX R0
|
BX R0
|
||||||
ENDP
|
ENDP
|
||||||
|
|
||||||
; Dummy Exception Handlers (infinite loops which can be modified)
|
|
||||||
|
|
||||||
NMI_Handler PROC
|
|
||||||
EXPORT NMI_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
HardFault_Handler\
|
|
||||||
PROC
|
|
||||||
EXPORT HardFault_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
MemManage_Handler\
|
|
||||||
PROC
|
|
||||||
EXPORT MemManage_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
BusFault_Handler\
|
|
||||||
PROC
|
|
||||||
EXPORT BusFault_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
UsageFault_Handler\
|
|
||||||
PROC
|
|
||||||
EXPORT UsageFault_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
SVC_Handler PROC
|
|
||||||
EXPORT SVC_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
DebugMon_Handler\
|
|
||||||
PROC
|
|
||||||
EXPORT DebugMon_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
PendSV_Handler PROC
|
|
||||||
EXPORT PendSV_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
SysTick_Handler PROC
|
|
||||||
EXPORT SysTick_Handler [WEAK]
|
|
||||||
B .
|
|
||||||
ENDP
|
|
||||||
|
|
||||||
Default_Handler PROC
|
|
||||||
|
|
||||||
EXPORT WWDG_IRQHandler [WEAK]
|
|
||||||
EXPORT PVD_IRQHandler [WEAK]
|
|
||||||
EXPORT TAMPER_IRQHandler [WEAK]
|
|
||||||
EXPORT RTC_IRQHandler [WEAK]
|
|
||||||
EXPORT FLASH_IRQHandler [WEAK]
|
|
||||||
EXPORT RCC_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI0_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI1_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI2_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI3_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI4_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel1_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel2_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel3_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel4_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel5_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel6_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA1_Channel7_IRQHandler [WEAK]
|
|
||||||
EXPORT ADC1_2_IRQHandler [WEAK]
|
|
||||||
EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
|
|
||||||
EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK]
|
|
||||||
EXPORT CAN1_RX1_IRQHandler [WEAK]
|
|
||||||
EXPORT CAN1_SCE_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI9_5_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM1_BRK_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM1_UP_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM1_CC_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM2_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM3_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM4_IRQHandler [WEAK]
|
|
||||||
EXPORT I2C1_EV_IRQHandler [WEAK]
|
|
||||||
EXPORT I2C1_ER_IRQHandler [WEAK]
|
|
||||||
EXPORT I2C2_EV_IRQHandler [WEAK]
|
|
||||||
EXPORT I2C2_ER_IRQHandler [WEAK]
|
|
||||||
EXPORT SPI1_IRQHandler [WEAK]
|
|
||||||
EXPORT SPI2_IRQHandler [WEAK]
|
|
||||||
EXPORT USART1_IRQHandler [WEAK]
|
|
||||||
EXPORT USART2_IRQHandler [WEAK]
|
|
||||||
EXPORT USART3_IRQHandler [WEAK]
|
|
||||||
EXPORT EXTI15_10_IRQHandler [WEAK]
|
|
||||||
EXPORT RTCAlarm_IRQHandler [WEAK]
|
|
||||||
EXPORT USBWakeUp_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM8_BRK_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM8_UP_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM8_TRG_COM_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM8_CC_IRQHandler [WEAK]
|
|
||||||
EXPORT ADC3_IRQHandler [WEAK]
|
|
||||||
EXPORT FSMC_IRQHandler [WEAK]
|
|
||||||
EXPORT SDIO_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM5_IRQHandler [WEAK]
|
|
||||||
EXPORT SPI3_IRQHandler [WEAK]
|
|
||||||
EXPORT UART4_IRQHandler [WEAK]
|
|
||||||
EXPORT UART5_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM6_IRQHandler [WEAK]
|
|
||||||
EXPORT TIM7_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA2_Channel1_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA2_Channel2_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA2_Channel3_IRQHandler [WEAK]
|
|
||||||
EXPORT DMA2_Channel4_5_IRQHandler [WEAK]
|
|
||||||
|
|
||||||
WWDG_IRQHandler
|
|
||||||
PVD_IRQHandler
|
|
||||||
TAMPER_IRQHandler
|
|
||||||
RTC_IRQHandler
|
|
||||||
FLASH_IRQHandler
|
|
||||||
RCC_IRQHandler
|
|
||||||
EXTI0_IRQHandler
|
|
||||||
EXTI1_IRQHandler
|
|
||||||
EXTI2_IRQHandler
|
|
||||||
EXTI3_IRQHandler
|
|
||||||
EXTI4_IRQHandler
|
|
||||||
DMA1_Channel1_IRQHandler
|
|
||||||
DMA1_Channel2_IRQHandler
|
|
||||||
DMA1_Channel3_IRQHandler
|
|
||||||
DMA1_Channel4_IRQHandler
|
|
||||||
DMA1_Channel5_IRQHandler
|
|
||||||
DMA1_Channel6_IRQHandler
|
|
||||||
DMA1_Channel7_IRQHandler
|
|
||||||
ADC1_2_IRQHandler
|
|
||||||
USB_HP_CAN1_TX_IRQHandler
|
|
||||||
USB_LP_CAN1_RX0_IRQHandler
|
|
||||||
CAN1_RX1_IRQHandler
|
|
||||||
CAN1_SCE_IRQHandler
|
|
||||||
EXTI9_5_IRQHandler
|
|
||||||
TIM1_BRK_IRQHandler
|
|
||||||
TIM1_UP_IRQHandler
|
|
||||||
TIM1_TRG_COM_IRQHandler
|
|
||||||
TIM1_CC_IRQHandler
|
|
||||||
TIM2_IRQHandler
|
|
||||||
TIM3_IRQHandler
|
|
||||||
TIM4_IRQHandler
|
|
||||||
I2C1_EV_IRQHandler
|
|
||||||
I2C1_ER_IRQHandler
|
|
||||||
I2C2_EV_IRQHandler
|
|
||||||
I2C2_ER_IRQHandler
|
|
||||||
SPI1_IRQHandler
|
|
||||||
SPI2_IRQHandler
|
|
||||||
USART1_IRQHandler
|
|
||||||
USART2_IRQHandler
|
|
||||||
USART3_IRQHandler
|
|
||||||
EXTI15_10_IRQHandler
|
|
||||||
RTCAlarm_IRQHandler
|
|
||||||
USBWakeUp_IRQHandler
|
|
||||||
TIM8_BRK_IRQHandler
|
|
||||||
TIM8_UP_IRQHandler
|
|
||||||
TIM8_TRG_COM_IRQHandler
|
|
||||||
TIM8_CC_IRQHandler
|
|
||||||
ADC3_IRQHandler
|
|
||||||
FSMC_IRQHandler
|
|
||||||
SDIO_IRQHandler
|
|
||||||
TIM5_IRQHandler
|
|
||||||
SPI3_IRQHandler
|
|
||||||
UART4_IRQHandler
|
|
||||||
UART5_IRQHandler
|
|
||||||
TIM6_IRQHandler
|
|
||||||
TIM7_IRQHandler
|
|
||||||
DMA2_Channel1_IRQHandler
|
|
||||||
DMA2_Channel2_IRQHandler
|
|
||||||
DMA2_Channel3_IRQHandler
|
|
||||||
DMA2_Channel4_5_IRQHandler
|
|
||||||
B .
|
|
||||||
|
|
||||||
ENDP
|
|
||||||
|
|
||||||
ALIGN
|
ALIGN
|
||||||
|
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
; User Stack and Heap initialization
|
; User Stack and Heap initialization
|
||||||
;*******************************************************************************
|
;*******************************************************************************
|
||||||
IF :DEF:__MICROLIB
|
|
||||||
|
|
||||||
EXPORT __initial_sp
|
EXPORT __initial_sp
|
||||||
EXPORT __heap_base
|
EXPORT __heap_base
|
||||||
EXPORT __heap_limit
|
EXPORT __heap_limit
|
||||||
|
|
||||||
ELSE
|
|
||||||
|
|
||||||
IMPORT __use_two_region_memory
|
|
||||||
EXPORT __user_initial_stackheap
|
|
||||||
|
|
||||||
__user_initial_stackheap
|
|
||||||
|
|
||||||
LDR R0, = Heap_Mem
|
|
||||||
LDR R1, =(Stack_Mem + Stack_Size)
|
|
||||||
LDR R2, = (Heap_Mem + Heap_Size)
|
|
||||||
LDR R3, = Stack_Mem
|
|
||||||
BX LR
|
|
||||||
|
|
||||||
ALIGN
|
|
||||||
|
|
||||||
ENDIF
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
|
@ -23,21 +23,99 @@ __heap_limit
|
||||||
EXPORT __Vectors_End
|
EXPORT __Vectors_End
|
||||||
EXPORT __Vectors_Size
|
EXPORT __Vectors_Size
|
||||||
|
|
||||||
__Vectors DCD __initial_sp ; Top of Stack
|
__Vectors DCD __initial_sp ; Top of Stack
|
||||||
DCD Reset_Handler ; Reset Handler
|
DCD Reset_Handler ; Reset Handler
|
||||||
|
IF GD32 = "1"
|
||||||
|
DCD FaultHandler ; NMI Handler
|
||||||
|
DCD FaultHandler ; Hard Fault Handler
|
||||||
|
DCD FaultHandler ; MPU Fault Handler
|
||||||
|
DCD FaultHandler ; Bus Fault Handler
|
||||||
|
DCD FaultHandler ; Usage Fault Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD UserHandler ; SVCall Handler
|
||||||
|
DCD UserHandler ; Debug Monitor Handler
|
||||||
|
DCD 0 ; Reserved
|
||||||
|
DCD UserHandler ; PendSV Handler
|
||||||
|
DCD UserHandler ; SysTick Handler
|
||||||
|
|
||||||
|
; External Interrupts
|
||||||
|
DCD UserHandler ; Window Watchdog
|
||||||
|
DCD UserHandler ; PVD through EXTI Line detect
|
||||||
|
DCD UserHandler ; Tamper
|
||||||
|
DCD UserHandler ; RTC
|
||||||
|
DCD UserHandler ; Flash
|
||||||
|
DCD UserHandler ; RCC
|
||||||
|
DCD UserHandler ; EXTI Line 0
|
||||||
|
DCD UserHandler ; EXTI Line 1
|
||||||
|
DCD UserHandler ; EXTI Line 2
|
||||||
|
DCD UserHandler ; EXTI Line 3
|
||||||
|
DCD UserHandler ; EXTI Line 4
|
||||||
|
DCD UserHandler ; DMA1 Channel 1
|
||||||
|
DCD UserHandler ; DMA1 Channel 2
|
||||||
|
DCD UserHandler ; DMA1 Channel 3
|
||||||
|
DCD UserHandler ; DMA1 Channel 4
|
||||||
|
DCD UserHandler ; DMA1 Channel 5
|
||||||
|
DCD UserHandler ; DMA1 Channel 6
|
||||||
|
DCD UserHandler ; DMA1 Channel 7
|
||||||
|
DCD UserHandler ; ADC1 & ADC2
|
||||||
|
DCD UserHandler ; USB High Priority or CAN1 TX
|
||||||
|
DCD UserHandler ; USB Low Priority or CAN1 RX0
|
||||||
|
DCD UserHandler ; CAN1 RX1
|
||||||
|
DCD UserHandler ; CAN1 SCE
|
||||||
|
DCD UserHandler ; EXTI Line 9..5
|
||||||
|
DCD UserHandler ; TIM1 Break
|
||||||
|
DCD UserHandler ; TIM1 Update
|
||||||
|
DCD UserHandler ; TIM1 Trigger and Commutation
|
||||||
|
DCD UserHandler ; TIM1 Capture Compare
|
||||||
|
DCD UserHandler ; TIM2
|
||||||
|
DCD UserHandler ; TIM3
|
||||||
|
DCD UserHandler ; TIM4
|
||||||
|
DCD UserHandler ; I2C1 Event
|
||||||
|
DCD UserHandler ; I2C1 Error
|
||||||
|
DCD UserHandler ; I2C2 Event
|
||||||
|
DCD UserHandler ; I2C2 Error
|
||||||
|
DCD UserHandler ; SPI1
|
||||||
|
DCD UserHandler ; SPI2
|
||||||
|
DCD UserHandler ; USART1
|
||||||
|
DCD UserHandler ; USART2
|
||||||
|
DCD UserHandler ; USART3
|
||||||
|
DCD UserHandler ; EXTI Line 15..10
|
||||||
|
DCD UserHandler ; RTC Alarm through EXTI Line
|
||||||
|
DCD UserHandler ; USB Wakeup from suspend
|
||||||
|
DCD UserHandler ; TIM8 Break
|
||||||
|
DCD UserHandler ; TIM8 Update
|
||||||
|
DCD UserHandler ; TIM8 Trigger and Commutation
|
||||||
|
DCD UserHandler ; TIM8 Capture Compare
|
||||||
|
DCD UserHandler ; ADC3
|
||||||
|
DCD UserHandler ; FSMC
|
||||||
|
DCD UserHandler ; SDIO
|
||||||
|
DCD UserHandler ; TIM5
|
||||||
|
DCD UserHandler ; SPI3
|
||||||
|
DCD UserHandler ; UART4
|
||||||
|
DCD UserHandler ; UART5
|
||||||
|
DCD UserHandler ; TIM6
|
||||||
|
DCD UserHandler ; TIM7
|
||||||
|
DCD UserHandler ; DMA2 Channel1
|
||||||
|
DCD UserHandler ; DMA2 Channel2
|
||||||
|
DCD UserHandler ; DMA2 Channel3
|
||||||
|
DCD UserHandler ; DMA2 Channel4 & Channel5
|
||||||
|
ENDIF
|
||||||
__Vectors_End
|
__Vectors_End
|
||||||
|
|
||||||
__Vectors_Size EQU __Vectors_End - __Vectors
|
__Vectors_Size EQU __Vectors_End - __Vectors
|
||||||
|
|
||||||
AREA |.text|, CODE, READONLY
|
AREA |.text|, CODE, READONLY
|
||||||
|
|
||||||
; Reset handler
|
; Reset handler
|
||||||
Reset_Handler PROC
|
Reset_Handler PROC
|
||||||
EXPORT Reset_Handler [WEAK]
|
EXPORT Reset_Handler [WEAK]
|
||||||
IMPORT __main
|
IMPORT __main
|
||||||
IMPORT SystemInit
|
IMPORT SystemInit
|
||||||
LDR R0, =SystemInit
|
LDR R0, =SystemInit
|
||||||
BLX R0
|
BLX R0
|
||||||
LDR R0, =__main
|
LDR R0, =__main
|
||||||
BX R0
|
BX R0
|
||||||
ENDP
|
ENDP
|
||||||
|
@ -51,5 +129,4 @@ Reset_Handler PROC
|
||||||
EXPORT __heap_base
|
EXPORT __heap_base
|
||||||
EXPORT __heap_limit
|
EXPORT __heap_limit
|
||||||
|
|
||||||
|
|
||||||
END
|
END
|
||||||
|
|
Loading…
Reference in New Issue