DSP3-TMS32F28377D芯片中 InitPieVectTable(); 初始化中断向量表 讲解

//---------------------------------------------------------------------------
// InitPieVectTable:
//---------------------------------------------------------------------------
// This function initializes the PIE vector table to a known state.
// This function must be executed after boot time.

void InitPieVectTable(void)
{
    Uint16  i;  
    Uint32  *Source  =  (void  *)  &PieVectTableInit;  
    Uint32  *Dest  =  (void  *)  &PieVectTable;  

// Do not write over first 3 32-bit locations (these locations are
// initialized by Boot ROM with boot variables)

    Source  =  Source  +  3;  
    Dest  =  Dest  +  3;  

    EALLOW;  
    for(i  =  0;  i  <  221;  i++)  
    {  
    *Dest++  =  *Source++;  
    }  
    EDIS;  

// Enable the PIE Vector Table
    PieCtrlRegs.PIECTRL.bit.ENPIE  =  1;  
}

这是一个用于初始化TMS32F28377D芯片中中断向量表的函数。逐行解释代码的功能:

  • 首先,声明了两个指针类型变量 Source 和 Dest,它们分别指向 PieVectTableInit 和 PieVectTable。
  • 接着,将 Source 和 Dest 各自增加 3 的偏移量。这是因为前三个32位位置是由引导程序(Boot ROM)用于初始化引导变量的,所以不应该被覆写。
  • 然后,使用 EALLOW 和 EDIS 宏来使能对 PIE Vector Table 的写操作权限。
  • 通过循环将 Source 指针指向的值复制给 Dest 指针指向的地址,并递增这两个指针的值。循环执行 221 次TMS32F28377D芯片具有 221 个中断向量表项,每个项都包含一个指向中断服务程序的地址,将 PieVectTableInit 的内容复制到 PieVectTable。
  • 最后,通过设置 PieCtrlRegs.PIECTRL.bit.ENPIE 为 1,启用 PIE(Peripheral Interrupt Expansion)向量表。

简单来说,该函数的作用是将预定义的中断向量表数据复制到实际的中断向量表地址,并启用中断向量表。这样,处理器在执行中断服务程序时,会根据中断发生的类型找到相应的中断向量表项,从而执行相应的中断服务程序。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值