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.

[参考译文] CCS/LAUNCHXL-TMS57004:使用 BQ76PL455EVM 对 TMS570进行 RTI 管理

Guru**** 2535170 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/887033/ccs-launchxl-tms57004-rti-management-on-tms570-with-bq76pl455evm

器件型号:LAUNCHXL-TMS57004
主题中讨论的其他器件:BQ76PL455EVMHALCOGEN

工具/软件:Code Composer Studio

大家好、

我正在尝试使用 BQ76PL455EVM 在 TMS570上开发 BMS 算法。 我需要在德州仪器提供的示例代码中添加一个 RTI。  

extern void rtiCompare1中断(void);
extern void rtiCompare2中断(void);
extern void rtiCompare3中断(void); 

我已将上面描述的代码添加到 sys_vim.h,并 将下面描述的代码(rtiCompare1 Interrupt、rtiCompare2 Interrupt、rtiCompare3 Interrupt)添加到 sys_vim.c  

静态常量 t_isrFuncptr s_vim_init[96U]=
{
phantomInterrupt (&P)、
等高中断(&E)、 /*通道0 */
phantomInterrupt (&P)、 /*通道1 */
rtiCompare0Interrupt (&R)、 /*通道2 */
rtiCompare1中断(&R)、 /*通道3 */
rtiCompare2Interrupt (&R)、 /*通道4 */
rtiCompare3中断(&R)、 /*通道5 */
phantomInterrupt (&P)、 /*通道6 */
phantomInterrupt (&P)、 /*通道7 */
phantomInterrupt (&P)、 /*通道8 */.....

} 

我已将以下部分添加到 rt.c

//
#pragma CODE_STATE (rtiCompare1 Interrupt,32)
#pragma INTERRUPT (rtiCompare1 Interrupt,IRQ)

//* sourceId:RTI_sourceId_023 *//
////* DesignId:RTI_DesignId_022 *//
///*要求:HL_SR95 *
/void rtiCompare1Interrupt (void)
*/

*用户代码*(void)*/*/*用户代码*/*

rtiREG1->INTFLAG = 2U;
rtiNotification (rtiNOTIFICATION_COMPARE1);

//用户代码开始(78)*//
*//*用户代码结束*
//*


//*用户代码开始(79)*//
*//*用户代码结束*//

//*@fn void rtiare2Interrupt (void)
*





IRQ @brief RTI1 Comp2 Interrupt Handler ** RTI1 * RTCompar2 ***中断处理程序***** RTI2,Compar2 *中断处理程序#tirtist 2 *,中断2 *,中断处理程序#tirtic2 *,中断2 *中断处理程序*,比较2

/* sourceId:RTI_sourceId_024 */*
DesignId:RTI_DesignId_022 */*
要求:HL_SR95 */
void rtiCompare2Interrupt (void)
{
//用户代码开始(80)*/*
用户代码结束*/

rtiREG1->INTFLAG = 4U;
rtiNotification (rtiNOTIFICATION_COMPARE2);

//*用户代码开始(81)*//
*//*用户代码结束*
/


*用户代码开始(82)*//
*//*用户代码结束*//

//*@fn void rtiare3Interrupt (void)
*





IRQ @brief RTI1 Comp3 Interrupt Handler * RTI1 ** RTCompar3 Interrupt ******* RTI3 Interrupt Compart #tion ******** Compar3 interrupt Compare 3 interrupt #tion *(Compar3 interrupt Compare **

/* sourceId:RTI_sourceId_025 */*
DesignId:RTI_DesignId_022 */*
要求:HL_SR95 */
void rtiCompare3Interrupt (void)
{
//用户代码开始(83)*/*
用户代码结束*/

rtiREG1->INTFLAG = 8U;
rtiNotification (rtiNOTIFICATION_COMPARE3);

//用户代码开始(84)*/
//*用户代码结束*/
}


并将以下部分添加到 notification.c 中

#pragma weak (rtiNotification)
void rtiNotification (uint32 notification)
{

如果(notification == rtiNOTIFICATION_COMPARE0)
{

printf ("Selam \r\n");

}

否则(notification == rtiNOTIFICATION_COMPARE1)
{
RTI_TIMEOUT = 1;
}
如果(notification == rtiNOTIFICATION_COMPARE2)则为其他(notification == rtiNOTIFICATION_COMPARE2)
{
printf ("hop \r\n");
}
否则、如果(notification == rtiNOTIFICATION_COMPARE3)
{
printf ("hop \r\n");
}
/*在用户代码开始和用户代码结束之间输入用户代码。 //
//*用户代码开始(9)*/**
-清除所有挂起的中断*///tirREG1->INTFLAG
= 0x0007000FU;

//RTI_TIMEOUT = 1;
//用户代码结束*/}

我的中断现在可以正常工作、但现在我无法从 BQ76PL455EVM 读取电压值等。 所有读数为0。 将代码还原为以前的版本时。 它可以再次工作、但在这种情况下、我没有任何计时器中断。

最小单元:1,电压:0.000000
最大电池数:0,电压:0.000000
电池组电压= 0.000000

可能是什么问题。 如何解决该问题?

谢谢。

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

    您好、Yusuf、

    如果 CPU 一直处理3个 RTI 中断、它就没有时间执行其他代码来从 BQ76读取数据。

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

    实际上、我认为并将计时器减少到2、并增加了计时器周期、但这并没有改变故事的结束。 仍然不起作用。  

    你有什么想法吗?

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

    您好、土耳其、

    如果所有 RTI 中断都被禁用、您是否能够从 BQ76器件读回数据?

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

    您好、Wang、

    不幸的是,我不能这样做? 我手上有两个代码。  

    代码:BQ76PL455EVM 的示例使用代码->此代码仅包含 Compare0计时器。 我无法理解 COMPARA0的占空比。 它是用一个时间段中断,而 TMS570检查是否有传入字节;还是在通信获取数据时中断?

    2.代码:我从具有4个定时器的 HalCoGen 生成的代码。 它运行良好。 但在这种情况下、TMS570不会从 BQ76PL455EVM 中获取值。 因此、我需要配置计时器和中断、但无法配置。

    我认为我的错误位于 s_vim_init[] 函数上。 让我为1.Code 和2.Code 共享相同的函数。

    代码:

    **@file sys_vim.c
    *@vim Driver Inmplementation File
    *@date 25.July 2013
    *@version 03.06.00
    *
    //
    
    *(c) Texas Instruments 2009-2013,保留所有权利。 //
    
    
    #include "sys_vim.h"
    #include "system.h"
    #include "ESM.h"
    
    //*用户代码开始(0)*//
    //*用户代码结束*//
    
    * VIM RAM 定义*//
    //**@struct vimRam
    *@简要 VIM RAM 定义
    *
    此类型用于访问 VIM RAM。
    //
    /**@typedef vimRAM_t
    *@简要 VIM RAM 类型定义
    *
    *此类型用于访问 VIM RAM。
    */
    typedef volatile struct vimRam
    {
    t_isrFuncptr ISR[VIM_CHANNELS + 1U];
    }vimRAM_t;
    
    #define vimRAM ((vimRAM_t *) 0xFFF82000U)
    
    静态常量 t_isrFuncptr s_vim_init[129U]=
    {
    phantomInterrupt (&P)、
    等高中断(&E)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    rtiCompare0Interrupt (&R)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    线性高线性中断(&L)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    phantomInterrupt (&P)、
    PhantomInterrupt
    、};
    void vimParityHandler (void);
    
    //@fn void vimInit (void)
    *@brief 初始化 VIM 模块
    *
    *此函数初始化 VIM RAM 和寄存器
    */
    
    void vimInit (void)
    {
    //初始化 VIM 错误表*
    {
    uint32 i;
    
    对于(I = 0U;I <(VIM_CHANNELS + 1U);I++)
    {
    vimRAM->ISR[i]= s_vim_init[i];
    }
    }
    
    /*设置回退地址奇偶校验错误寄存器*/
    /*SAFETYMCUSW 439 S MR:11.3 "需要将函数的地址存储在32位寄存器中"*/
    VIM_FBPARERR =(uint32)&vimParityErrorHandler;
    
    /*设置 IRQ/FIQ 优先级*/
    vimREG->FIRQPR0 = SYS_FIQ
    |(SYS_FIQ << 1U)
    |(SYS_IRQ << 2U)
    |(SYS_IRQ << 3U)
    |(SYS_IRQ << 4U)
    |(SYS_IRQ << 5U)
    |(SYS_IRQ << 6U)
    |(SYS_IRQ << 7U)
    |(SYS_IRQ << 8U)
    |(SYS_IRQ << 9U)
    |(SYS_IRQ << 10U)
    |(SYS_IRQ << 11U)
    |(SYS_IRQ << 12U)
    |(SYS_IRQ << 13U)
    |(SYS_IRQ << 14U)
    |(SYS_IRQ << 15U)
    |(SYS_IRQ << 16U)
    |(SYS_IRQ << 17U)
    |(SYS_IRQ << 18U)
    |(SYS_IRQ << 19U)
    |(SYS_IRQ << 20U)
    |(SYS_IRQ << 21U)
    |(SYS_IRQ << 22U)
    |(SYS_IRQ << 23U)
    |(SYS_IRQ << 24U)
    |(SYS_IRQ << 25U)
    |(SYS_IRQ << 26U)
    |(SYS_IRQ << 27U)
    |(SYS_IRQ << 28U)
    |(SYS_IRQ << 29U)
    |(SYS_IRQ << 30U)
    |(SYS_IRQ << 31U);
    
    vimREG->FIRQPR1 = SYS_IRQ
    |(SYS_IRQ << 1U)
    |(SYS_IRQ << 2U)
    |(SYS_IRQ << 3U)
    |(SYS_IRQ << 4U)
    |(SYS_IRQ << 5U)
    |(SYS_IRQ << 6U)
    |(SYS_IRQ << 7U)
    |(SYS_IRQ << 8U)
    |(SYS_IRQ << 9U)
    |(SYS_IRQ << 10U)
    |(SYS_IRQ << 11U)
    |(SYS_IRQ << 12U)
    |(SYS_IRQ << 13U)
    |(SYS_IRQ << 14U)
    |(SYS_IRQ << 15U)
    |(SYS_IRQ << 16U)
    |(SYS_IRQ << 17U)
    |(SYS_IRQ << 18U)
    |(SYS_IRQ << 19U)
    |(SYS_IRQ << 20U)
    |(SYS_IRQ << 21U)
    |(SYS_IRQ << 22U)
    |(SYS_IRQ << 23U)
    |(SYS_IRQ << 24U)
    |(SYS_IRQ << 25U)
    |(SYS_IRQ << 26U)
    |(SYS_IRQ << 27U)
    |(SYS_IRQ << 28U)
    |(SYS_IRQ << 29U)
    |(SYS_IRQ << 30U)
    |(SYS_IRQ << 31U);
    
    
    vimREG->FIRQPR2 = SYS_IRQ
    |(SYS_IRQ << 1U)
    |(SYS_IRQ << 2U)
    |(SYS_IRQ << 3U)
    |(SYS_IRQ << 4U)
    |(SYS_IRQ << 5U)
    |(SYS_IRQ << 6U)
    |(SYS_IRQ << 7U)
    |(SYS_IRQ << 8U)
    |(SYS_IRQ << 9U)
    |(SYS_IRQ << 10U)
    |(SYS_IRQ << 11U)
    |(SYS_IRQ << 12U)
    |(SYS_IRQ << 13U)
    |(SYS_IRQ << 14U)
    |(SYS_IRQ << 15U)
    |(SYS_IRQ << 16U)
    |(SYS_IRQ << 17U)
    |(SYS_IRQ << 18U)
    |(SYS_IRQ << 19U)
    |(SYS_IRQ << 20U)
    |(SYS_IRQ << 21U)
    |(SYS_IRQ << 22U)
    |(SYS_IRQ << 23U)
    |(SYS_IRQ << 24U)
    |(SYS_IRQ << 25U)
    |(SYS_IRQ << 26U)
    |(SYS_IRQ << 27U)
    |(SYS_IRQ << 28U)
    |(SYS_IRQ << 29U)
    |(SYS_IRQ << 30U)
    |(SYS_IRQ << 31U);
    
    vimREG->FIRQPR3 = SYS_IRQ
    |(SYS_IRQ << 1U)
    |(SYS_IRQ << 2U)
    |(SYS_IRQ << 3U)
    |(SYS_IRQ << 4U)
    |(SYS_IRQ << 5U)
    |(SYS_IRQ << 6U)
    |(SYS_IRQ << 7U)
    |(SYS_IRQ << 8U)
    |(SYS_IRQ << 9U)
    |(SYS_IRQ << 10U)
    |(SYS_IRQ << 11U)
    |(SYS_IRQ << 12U)
    |(SYS_IRQ << 13U)
    |(SYS_IRQ << 14U)
    |(SYS_IRQ << 15U)
    |(SYS_IRQ << 16U)
    |(SYS_IRQ << 17U)
    |(SYS_IRQ << 18U)
    |(SYS_IRQ << 19U)
    |(SYS_IRQ << 20U)
    |(SYS_IRQ << 21U)
    |(SYS_IRQ << 22U)
    |(SYS_IRQ << 23U)
    |(SYS_IRQ << 24U)
    |(SYS_IRQ << 25U)
    |(SYS_IRQ << 26U)
    |(SYS_IRQ << 27U)
    |(SYS_IRQ << 28U)
    |(SYS_IRQ << 29U)
    |(SYS_IRQ << 30U)
    |(SYS_IRQ << 31U);
    
    
    /*启用中断*/
    vimREG->REQMASKSET0 = 1U
    |(1U << 1U)
    |(0U << 2U)
    |(1U << 3U)
    |(0U << 4U)
    |(0U << 5U)
    |(0U << 6U)
    |(0U << 7U)
    |(0U << 8U)
    |(0U << 9U)
    |(0U << 10U)
    |(0U << 11U)
    |(0U << 12U)
    |(1U << 13U)
    |(0U << 14U)
    |(0U << 15U)
    |(0U << 16U)
    |(0U << 17U)
    |(0U << 18U)
    |(0U << 19U)
    |(0U << 20U)
    |(0U << 21U)
    |(0U << 22U)
    |(0U << 23U)
    |(0U << 24U)
    |(0U << 25U)
    |(0U << 26U)
    |(0U << 27U)
    |(0U << 28U)
    |(0U << 29U)
    |(0U << 30U)
    |(0U << 31U);
    
    vimREG->REQMASKSET1 = 0U
    |(0U << 1U)
    |(0U << 2U)
    |(0U << 3U)
    |(0U << 4U)
    |(0U << 5U)
    |(0U << 6U)
    |(0U << 7U)
    |(0U << 8U)
    |(0U << 9U)
    |(0U << 10U)
    |(0U << 11U)
    |(0U << 12U)
    |(0U << 13U)
    |(0U << 14U)
    |(0U << 15U)
    |(0U << 16U)
    |(0U << 17U)
    |(0U << 18U)
    |(0U << 19U)
    |(0U << 20U)
    |(0U << 21U)
    |(0U << 22U)
    |(0U << 23U)
    |(0U << 24U)
    |(0U << 25U)
    |(0U << 26U)
    |(0U << 27U)
    |(0U << 28U)
    |(0U << 29U)
    |(0U << 30U)
    |(0U << 31U);
    
    vimREG->REQMASKSET2 = 0U
    |(0U << 1U)
    |(0U << 2U)
    |(0U << 3U)
    |(0U << 4U)
    |(0U << 5U)
    |(0U << 6U)
    |(0U << 7U)
    |(0U << 8U)
    |(0U << 9U)
    |(0U << 10U)
    |(0U << 11U)
    |(0U << 12U)
    |(0U << 13U)
    |(0U << 14U)
    |(0U << 15U)
    |(0U << 16U)
    |(0U << 17U)
    |(0U << 18U)
    |(0U << 19U)
    |(0U << 20U)
    |(0U << 21U)
    |(0U << 22U)
    |(0U << 23U)
    |(0U << 24U)
    |(0U << 25U)
    |(0U << 26U)
    |(0U << 27U)
    |(0U << 28U)
    |(0U << 29U)
    |(0U << 30U)
    |(0U << 31U);
    
    vimREG->REQMASKSET3 = 0U
    |(0U << 1U)
    |(0U << 2U)
    |(0U << 3U)
    |(0U << 4U)
    |(0U << 5U)
    |(0U << 6U)
    |(0U << 7U)
    |(0U << 8U)
    |(0U << 9U)
    |(0U << 10U)
    |(0U << 11U)
    |(0U << 12U)
    |(0U << 13U)
    |(0U << 14U)
    |(0U << 15U)
    |(0U << 16U)
    |(0U << 17U)
    |(0U << 18U)
    |(0U << 19U)
    |(0U << 20U)
    |(0U << 21U)
    |(0U << 22U)
    |(0U << 23U)
    |(0U << 24U)
    |(0U << 25U)
    |(0U << 26U)
    |(0U << 27U)
    |(0U << 28U)
    |(0U << 29U)
    |(0U << 30U)
    |(0U << 31U);
    }
    
    /**@fn void vimChannelMap (uint32请求、uint32通道、t_isrFuncPTR 处理程序)
    *@将所选中断请求简要映射到所选通道
    *
    *@param[in]请求:中断请求编号2..95
    *@param[in]通道:VIM 通道编号2
    * param[par.95]处理程序中的 vim * param[param[param]@param[in] 中断处理程序的地址
    *
    此函数将所选中断请求映射到所选通道。
    *
    */
    void vimChannelMap (uint32请求、uint32通道、t_isrFuncptr 处理程序)
    {
    uint32 i、j;
    I =通道>> 2U; /*找到要配置的寄存器*/
    J =通道-(i<<2U); /*找到*/类型的偏移量
    J = 3U-j; /*反转字节顺序 *
    J = j<<3U; /*查找位位置 *
    
    /*将所需的中断请求映射到所需的通道*/
    vimREG->CHANCTRL[i]&=~(0xFFU <<j);
    vimREG->CHANCTRL[i]|=(请求<< j);
    
    /*更新 VIMRAM*/
    vimRAM->ISR[通道+1]=处理程序;
    }//**
    
    @fn void vimEnableInterrupt (uint32通道、布尔 inttype)
    *@简短启用所选通道的中断
    *
    *@param[in]通道:VIM 通道编号2..95
    *@param[in]处理程序:中断类型
    * - SYS_IRQ:所选通道将被启用为 IRQ
    * - SYS_FIQ:所选通道将启用为 FIQ
    *
    *此函数将启用所选通道的中断。
    *
    */
    void vimEnableInterrupt (uint32通道、布尔 inttype)
    {
    IF (通道>= 64U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR2 &=~(1U <<(channel-64U));
    }
    其他
    {
    vimREG->FIRQPR2 |= 1U <<(channel-64U);
    }
    vimREG->REQMASKSET2 = 1U <<(通道-64U);
    }
    否则、如果(通道>= 32U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR1 &=~(1U <<(channel-32U));
    }
    其他
    {
    vimREG->FIRQPR1 |= 1U <<(channel-32U);
    }
    vimREG->REQMASKSET1 = 1U <<(通道-32U);
    }
    否则(通道>= 2U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR0 &=~(1U <<通道);
    }
    其他
    {
    vimREG->FIRQPR0 |= 1U <<通道;
    }
    vimREG->REQMASKSET0 = 1U <<通道;
    }
    其他
    {
    /*空*/
    }
    }
    
    //@fn void vimDisableInterrupt (uint32通道)
    *@所选通道的短暂禁用中断
    *
    *@param[in]通道:VIM 通道编号2..95
    *
    *此函数将禁用所选通道的中断。
    *
    */
    void vimDisableInterrupt (uint32通道)
    {
    IF (通道>= 64U)
    {
    vimREG->REQMASKCLR2 = 1U <<(通道-64U);
    }
    否则、如果(通道>= 32U)
    {
    vimREG->REQMASKCLR1 = 1U <<(通道-32U);
    }
    否则(通道>= 2U)
    {
    vimREG->REQMASKCLR0 = 1U <<通道;
    }
    其他
    {
    /*空*/
    }
    }
    
    //*用户代码开始(1)*/
    *用户代码结束*/
    
    @fn void vimGetConfigValue (vim_config_reg_t * config_reg,CONFIG_value_type_t type)
    *@brief 获取配置寄存器的初始值或当前值
    *
    *@param[in]* CONFIG_reg: 指向需要存储配置寄存器初始值或当前值的结构的指针
    *@param[in]类型: 需要存储配置寄存器的初始值还是当前值
    * - InitialValue:配置寄存器的初始值将存储在 CONFIG_reg
    *指向的结构中 -电流值: 配置寄存器的初始值将存储在 CONFIG_reg 指向的结构中
    *
    *此函数将配置
    *寄存器的初始值或当前值(取决于参数'type')复制到 CONFIG_reg 指向的结构
    *
    //
    
    void vimGetConfigValue (vim_config_reg_t * CONFIG_reg、CONFIG_value_type_t type
    {)
    if (type == InitialValue)
    {
    CONFIG_REG->CONFIG_FIRQPR0 = VIM_FIRQPR0_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR1 = VIM_FIRQPR1_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR2 = VIM_FIRQPR2_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR3 = VIM_FIRQPR3_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET0 = VIM_REQMASKSET0_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET1 = VIM_REQMASKSET1_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET2 = VIM_REQMASKSET2_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET3 = VIM_REQMASKSET3_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET0 = VIM_WAKEMASKSET0_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET1 = VIM_WAKEMASKSET1_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET2 = VIM_WAKEMASKSET2_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET3 = VIM_WAKEMASKSET3_CONFIGVALUE;
    CONFIG_REG->CONFIG_CAPEVT = VIM_CAPEVT_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[0]= VIM_CHANCTRL0_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[1]= VIM_CHANCTRL1_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[2]= VIM_CHANCTRL2_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[3]= VIM_CHANCTRL3_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[4]= VIM_CHANCTRL4_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[5]= VIM_CHANCTRL5_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[6]= VIM_CHANCTRL6_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[7]= VIM_CHANCTRL7_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[8]= VIM_CHANCTRL8_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[9]= VIM_CHANCTRL9_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[10]= VIM_CHANCTRL10_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[11]= VIM_CHANCTRL11_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[12]= VIM_CHANCTRL12_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[13]= VIM_CHANCTRL13_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[14]= VIM_CHANCTRL14_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[15]= VIM_CHANCTRL15_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[16]= VIM_CHANCTRL16_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[17]= VIM_CHANCTRL17_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[18]= VIM_CHANCTRL18_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[19]= VIM_CHANCTRL19_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[20]= VIM_CHANCTRL20_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[21]= VIM_CHANCTRL21_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[22]= VIM_CHANCTRL22_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[23]= VIM_CHANCTRL23_CONFIGVALUE;
    }
    其他
    {
    /*SAFETYMCUSW 134 S MR:12.2. "寄存器回读支持"*/
    CONFIG_REG->CONFIG_FIRQPR0 = vimREG->FIRQPR0;
    CONFIG_REG->CONFIG_FIRQPR1 = vimREG->FIRQPR1;
    CONFIG_REG->CONFIG_FIRQPR2 = vimREG->FIRQPR2;
    CONFIG_REG->CONFIG_FIRQPR3 = vimREG->FIRQPR3;
    CONFIG_REG->CONFIG_REQMASKSET0 = vimREG->REQMASKSET0;
    CONFIG_REG->CONFIG_REQMASKSET1 = vimREG->REQMASKSET1;
    CONFIG_REG->CONFIG_REQMASKSET2 = vimREG->REQMASKSET2;
    CONFIG_REG->CONFIG_REQMASKSET3 = vimREG->REQMASKSET3;
    CONFIG_REG->CONFIG_WAKEMASKSET0 = vimREG->WAKEMASKSET0;
    CONFIG_REG->CONFIG_WAKEMASKSET1 = vimREG->WAKEMASKSET1;
    CONFIG_REG->CONFIG_WAKEMASKSET2 = vimREG->WAKEMASKSET2;
    CONFIG_REG->CONFIG_WAKEMASKSET3 = vimREG->WAKEMASKSET3;
    CONFIG_REG->CONFIG_CAPEVT = vimREG->CAPEVT;
    CONFIG_REG->CONFIG_CHANCTRL[0]= vimREG->CHANCTRL[0];
    CONFIG_REG->CONFIG_CHANCTRL[1]= vimREG->CHANCTRL[1];
    CONFIG_REG->CONFIG_CHANCTRL[2]= vimREG->CHANCTRL[2];
    CONFIG_REG->CONFIG_CHANCTRL[3]= vimREG->CHANCTRL[3];
    CONFIG_REG->CONFIG_CHANCTRL[4]= vimREG->CHANCTRL[4];
    CONFIG_REG->CONFIG_CHANCTRL[5]= vimREG->CHANCTRL[5];
    CONFIG_REG->CONFIG_CHANCTRL[6]= vimREG->CHANCTRL[6];
    CONFIG_REG->CONFIG_CHANCTRL[7]= vimREG->CHANCTRL[7];
    CONFIG_REG->CONFIG_CHANCTRL[8]= vimREG->CHANCTRL[8];
    CONFIG_REG->CONFIG_CHANCTRL[9]= vimREG->CHANCTRL[9];
    CONFIG_REG->CONFIG_CHANCTRL[10]= vimREG->CHANCTRL[10];
    CONFIG_REG->CONFIG_CHANCTRL[11]= vimREG->CHANCTRL[11];
    CONFIG_REG->CONFIG_CHANCTRL[12]= vimREG->CHANCTRL[12];
    CONFIG_REG->CONFIG_CHANCTRL[13]= vimREG->CHANCTRL[13];
    CONFIG_REG->CONFIG_CHANCTRL[14]= vimREG->CHANCTRL[14];
    CONFIG_REG->CONFIG_CHANCTRL[15]= vimREG->CHANCTRL[15];
    CONFIG_REG->CONFIG_CHANCTRL[16]= vimREG->CHANCTRL[16];
    CONFIG_REG->CONFIG_CHANCTRL[17]= vimREG->CHANCTRL[17];
    CONFIG_REG->CONFIG_CHANCTRL[18]= vimREG->CHANCTRL[18];
    CONFIG_REG->CONFIG_CHANCTRL[19]= vimREG->CHANCTRL[19];
    CONFIG_REG->CONFIG_CHANCTRL[20]= vimREG->CHANCTRL[20];
    CONFIG_REG->CONFIG_CHANCTRL[21]= vimREG->CHANCTRL[21];
    CONFIG_REG->CONFIG_CHANCTRL[22]= vimREG->CHANCTRL[22];
    CONFIG_REG->CONFIG_CHANCTRL[23]= vimREG->CHANCTRL[23];
    
    
    
    }
    }
    
    
    #pragma CODE_STATE (vimParityErrorHandler、32)
    #pragma INTERRUPT (vimParityErrorHandler、IRQ)
    #pragma weak (vimParityErrorHandler)
    
    void vimParityErrorHandler (void)
    {
    uint32 vec;
    
    /*标识损坏的地址*/
    uint32 error_addr = VIM_ADDERR;
    
    /*识别信道编号*/
    uint32 error_channel=((error_addr 和0x1FFU)>> 2U)- 1U;
    
    /*更正损坏的位置*/
    vimRAM->ISR[ERROR_CHANNEL + 1U]= s_vim_init[ERROR_CHANNEL + 1U];
    
    /*清除奇偶校验错误标志*/
    VIM_PARFLG = 1U;
    
    /*禁用并启用最高优先级的挂起通道*/
    if (vimREG->FIQINDEX!= 0U)
    {
    vec = vimREG->FIQINDEX - 1U;
    }
    其他
    {
    /*SAFETYMCUSW 134 S MR:12.2. "读取32位易失性寄存器"*/
    vec = vimREG->IRQINDEX - 1U;
    }
    if (VEC ==0U)
    {
    vimREG->INTREQ0 = 1U;
    vec = esmREG->IOFFHR - 1U;
    
    如果(VEC < 32U)
    {
    esmREG->SR1[0U]= 1U << VEC;
    esmGroup1Notification (VEC);
    }
    如果(VEC < 64U)
    {
    esmREG->SR1[1U]= 1U <<(VEC-32U);
    esmGroup2Notification (VEC-32U);
    }
    如果(VEC < 96U)
    {
    esmREG->SR4[0U]= 1U <<(VEC-64U);
    esmGroup1Notification (VEC-32U);
    }
    如果(VEC < 128U)
    {
    esmREG->SR4[1U]= 1U <<(VEC-96U);
    esmGroup2Notification (VEC-64U);
    }
    }
    如果(VEC < 32U)
    {
    vimREG->REQMASKCLR0 = 1U << VEC;
    vimREG->REQMASKSET0 = 1U << VEC;
    }
    如果(VEC < 64U)
    {
    vimREG->REQMASKCLR1 = 1U <<(VEC-32U);
    vimREG->REQMASKSET1 = 1U <<(VEC-32U);
    }
    其他
    {
    vimREG->REQMASKCLR2 = 1U <<(VEC-64U);
    vimREG->REQMASKSET2 = 1U <<(VEC-64U);
    }
    
    } 

    2.代码

    /**@文件 sys_vim.c
    *@简要 VIM 驱动程序实现文件
    *@日期2018年12月11日
    *@版本04.07.01
    *
    //
    
    *
    *版权所有(C) 2009-2018德州仪器(TI)公司- www.ti.com
    *
    
    *以源代码和二进制形式重新分发和使用,无论
    是否进行*修改, 只要
    符合以下条件*、则允许:
    *
    *源代码的重新分发必须保留上述版权
    *声明、此条件列表和以下免责声明。
    *
    *二进制形式的再发行必须在
    
    *
    发行版随附的*文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    *未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件派生的产品*。
    *
    *本软件由版权所有者和贡献者
    *按原样"提供、
    
    且不承认任何明示或暗示的保证、包括但不限于*特定用途*的适销性和适用性的暗示保证。 在任何情况下、版权
    *所有者或贡献者都不对任何直接、间接、偶然、
    *特殊、模范、 或相应的损害(包括但不
    限于*采购替代产品或服务;丧失使用、
    *数据或利润; 或业务中断)、但出于
    任何*责任理论、无论是合同、严格责任还是侵权
    行为*(包括疏忽或其他原因)、即使
    被告知可能会造成此类损坏、也是出于此类责任理论。
    *
    */
    
    
    
    #include "sys_vim.h"
    #include "system.h"
    #include "ESM.h"
    
    //*用户代码开始(0)*/
    //*用户代码结束*//
    
    * VIM RAM 定义*
    //**@struct vimRam
    *@简要 VIM RAM 定义
    *
    此类型用于访问 VIM RAM。
    //
    /**@typedef vimRAM_t
    *@简要 VIM RAM 类型定义
    *
    *此类型用于访问 VIM RAM。
    */
    typedef volatile struct vimRam
    {
    t_isrFuncptr ISR[VIM_CHANNELS];
    }vimRAM_t;
    
    #define vimRAM (((vimRAM_t *) 0xFFF82000U)
    
    静态常量 t_isrFuncptr s_vim_init[96U]=
    {
    phantomInterrupt (&P)、
    等高中断(&E)、 /*通道0 */
    phantomInterrupt (&P)、 /*通道1 */
    rtiCompare0Interrupt (&R)、 /*通道2 */
    rtiCompare1中断(&R)、 /*通道3 */
    rtiCompare2Interrupt (&R)、 /*通道4 */
    rtiCompare3中断(&R)、 /*通道5 */
    phantomInterrupt (&P)、 /*通道6 */
    phantomInterrupt (&P)、 /*通道7 */
    phantomInterrupt (&P)、 /*通道8 */
    phantomInterrupt (&P)、 /*通道9 */
    phantomInterrupt (&P)、 /*通道10 */
    phantomInterrupt (&P)、 /*通道11 */
    phantomInterrupt (&P)、 /*通道12 */
    phantomInterrupt (&P)、 /*信道13 */
    phantomInterrupt (&P)、 /*通道14 */
    phantomInterrupt (&P)、 /*通道15 */
    phantomInterrupt (&P)、 /*通道16 */
    phantomInterrupt (&P)、 /*通道17 */
    phantomInterrupt (&P)、 /*通道18 */
    phantomInterrupt (&P)、 /*通道19 */
    phantomInterrupt (&P)、 /*通道20 */
    phantomInterrupt (&P)、 /*通道21 */
    phantomInterrupt (&P)、 /*通道22 */
    phantomInterrupt (&P)、 /*通道23 */
    phantomInterrupt (&P)、 /*通道24 */
    phantomInterrupt (&P)、 /*通道25 */
    phantomInterrupt (&P)、 /*通道26 */
    phantomInterrupt (&P)、 /*通道27 */
    phantomInterrupt (&P)、 /*通道28 */
    phantomInterrupt (&P)、 /*通道29 */
    phantomInterrupt (&P)、 /*通道30 */
    phantomInterrupt (&P)、 /*通道31 */
    phantomInterrupt (&P)、 /*通道32 */
    phantomInterrupt (&P)、 /*信道33 */
    phantomInterrupt (&P)、 /*通道34 */
    phantomInterrupt (&P)、 /*通道35 */
    phantomInterrupt (&P)、 /*通道36 */
    phantomInterrupt (&P)、 /*通道37 */
    phantomInterrupt (&P)、 /*信道38 */
    phantomInterrupt (&P)、 /*信道39 */
    phantomInterrupt (&P)、 /*通道40 */
    phantomInterrupt (&P)、 /*通道41 */
    phantomInterrupt (&P)、 /*通道42 */
    phantomInterrupt (&P)、 /*信道43 */
    phantomInterrupt (&P)、 /*信道44 */
    phantomInterrupt (&P)、 /*通道45 */
    phantomInterrupt (&P)、 /*通道46 */
    phantomInterrupt (&P)、 /*信道47 */
    phantomInterrupt (&P)、 /*通道48 */
    phantomInterrupt (&P)、 /*通道49 */
    phantomInterrupt (&P)、 /*通道50 */
    phantomInterrupt (&P)、 /*信道51 */
    phantomInterrupt (&P)、 /*信道52 */
    phantomInterrupt (&P)、 /*信道53 */
    phantomInterrupt (&P)、 /*信道54 */
    phantomInterrupt (&P)、 /*频道55 */
    phantomInterrupt (&P)、 /*频道56 */
    phantomInterrupt (&P)、 /*频道57 */
    phantomInterrupt (&P)、 /*信道58 */
    phantomInterrupt (&P)、 /*信道59 */
    phantomInterrupt (&P)、 /*信道60 */
    phantomInterrupt (&P)、 /*信道61 */
    phantomInterrupt (&P)、 /*信道62 */
    phantomInterrupt (&P)、 /*信道63 */
    phantomInterrupt (&P)、 /*信道64 */
    phantomInterrupt (&P)、 /*通道65 */
    phantomInterrupt (&P)、 /*信道66 */
    phantomInterrupt (&P)、 /*信道67 */
    phantomInterrupt (&P)、 /*信道68 */
    phantomInterrupt (&P)、 /*信道69 */
    phantomInterrupt (&P)、 /*信道70 */
    phantomInterrupt (&P)、 /*信道71 */
    phantomInterrupt (&P)、 /*通道72 */
    phantomInterrupt (&P)、 /*信道73 */
    phantomInterrupt (&P)、 /*信道74 */
    phantomInterrupt (&P)、 /*通道75 */
    phantomInterrupt (&P)、 /*信道76 */
    phantomInterrupt (&P)、 /*信道77 */
    phantomInterrupt (&P)、 /*信道78 */
    phantomInterrupt (&P)、 /*信道79 */
    phantomInterrupt (&P)、 /*通道80 */
    phantomInterrupt (&P)、 /*信道81 */
    phantomInterrupt (&P)、 /*信道82 */
    phantomInterrupt (&P)、 /*信道83 */
    phantomInterrupt (&P)、 /*信道84 */
    phantomInterrupt (&P)、 /*频道85 */
    phantomInterrupt (&P)、 /*频道86 */
    phantomInterrupt (&P)、 /*信道87 */
    phantomInterrupt (&P)、 /*频道88 */
    phantomInterrupt (&P)、 /*信道89 */
    phantomInterrupt (&P)、 /*频道90 */
    phantomInterrupt (&P)、 /*通道91 */
    phantomInterrupt (&P)、 /*通道92 */
    phantomInterrupt (&P)、 /*信道93 */
    phantomInterrupt (&P)、 /*通道94 */
    };
    
    void vimParityErrorHandler (void);
    
    /**@fn void vimInit (void)
    *@brief 初始化 VIM 模块
    *
    *此函数初始化 VIM RAM 和寄存
    器*//
    //* ceId:vim_sourceId_001 *
    //* DesignId:vim_DesignId_001 *
    ///////*要求:vimId/* void
    (void
    
    /* VIM RAM 奇偶校验启用*/
    VIM_PARCTL = 0xAU;
    
    /*初始化 VIM 表*/
    {
    uint32 i;
    
    对于(I = 0U;I < VIM_CHANNELS;I++)
    {
    vimRAM->ISR[i]= s_vim_init[i];
    }
    }
    
    /*设置回退地址奇偶校验错误寄存器*/
    /*SAFETYMCUSW 439 S MR:11.3 "需要将函数的地址存储在32位寄存器中-根据 MISRA 提供建议"*/
    VIM_FBPARERR =(uint32)&vimParityErrorHandler;
    
    /*设置 IRQ/FIQ 优先级*/
    vimREG->FIRQPR0 =(uint32)((uint32) SYS_FIQ << 0U)
    |(UINT32)((UINT32) SYS_FIQ << 1U)
    |(UINT32)((UINT32) SYS_IRQ << 2U)
    |(UINT32)((UINT32) SYS_IRQ << 3U)
    |(UINT32)((UINT32) SYS_IRQ << 4U)
    |(UINT32)((UINT32) SYS_IRQ << 5U)
    |(UINT32)((UINT32) SYS_IRQ << 6U)
    |(UINT32)((UINT32) SYS_IRQ << 7U)
    |(UINT32)((UINT32) SYS_IRQ << 8U)
    |(UINT32)((UINT32) SYS_IRQ << 9U)
    |(UINT32)((UINT32) SYS_IRQ << 10U)
    |(UINT32)((UINT32) SYS_IRQ << 11U)
    |(UINT32)((UINT32) SYS_IRQ << 12U)
    |(UINT32)((UINT32) SYS_IRQ << 13U)
    |(UINT32)((UINT32) SYS_IRQ << 14U)
    |(UINT32)((UINT32) SYS_IRQ << 15U)
    |(UINT32)((UINT32) SYS_IRQ << 16U)
    |(UINT32)((UINT32) SYS_IRQ << 17U)
    |(UINT32)((UINT32) SYS_IRQ << 18U)
    |(UINT32)((UINT32) SYS_IRQ << 19U)
    |(UINT32)((UINT32) SYS_IRQ << 20U)
    |(UINT32)((UINT32) SYS_IRQ << 21U)
    |(UINT32)((UINT32) SYS_IRQ << 22U)
    |(UINT32)((UINT32) SYS_IRQ << 23U)
    |(UINT32)((UINT32) SYS_IRQ << 24U)
    |(UINT32)((UINT32) SYS_IRQ << 25U)
    |(UINT32)((UINT32) SYS_IRQ << 26U)
    |(UINT32)((UINT32) SYS_IRQ << 27U)
    |(UINT32)((UINT32) SYS_IRQ << 28U)
    |(UINT32)((UINT32) SYS_IRQ << 29U)
    |(UINT32)((UINT32) SYS_IRQ << 30U)
    |(UINT32)((UINT32) SYS_IRQ << 31U);
    
    vimREG->FIRQPR1 =(uint32)((uint32) SYS_IRQ << 0U)
    |(UINT32)((UINT32) SYS_IRQ << 1U)
    |(UINT32)((UINT32) SYS_IRQ << 2U)
    |(UINT32)((UINT32) SYS_IRQ << 3U)
    |(UINT32)((UINT32) SYS_IRQ << 4U)
    |(UINT32)((UINT32) SYS_IRQ << 5U)
    |(UINT32)((UINT32) SYS_IRQ << 6U)
    |(UINT32)((UINT32) SYS_IRQ << 7U)
    |(UINT32)((UINT32) SYS_IRQ << 8U)
    |(UINT32)((UINT32) SYS_IRQ << 9U)
    |(UINT32)((UINT32) SYS_IRQ << 10U)
    |(UINT32)((UINT32) SYS_IRQ << 11U)
    |(UINT32)((UINT32) SYS_IRQ << 12U)
    |(UINT32)((UINT32) SYS_IRQ << 13U)
    |(UINT32)((UINT32) SYS_IRQ << 14U)
    |(UINT32)((UINT32) SYS_IRQ << 15U)
    |(UINT32)((UINT32) SYS_IRQ << 16U)
    |(UINT32)((UINT32) SYS_IRQ << 17U)
    |(UINT32)((UINT32) SYS_IRQ << 18U)
    |(UINT32)((UINT32) SYS_IRQ << 19U)
    |(UINT32)((UINT32) SYS_IRQ << 20U)
    |(UINT32)((UINT32) SYS_IRQ << 21U)
    |(UINT32)((UINT32) SYS_IRQ << 22U)
    |(UINT32)((UINT32) SYS_IRQ << 23U)
    |(UINT32)((UINT32) SYS_IRQ << 24U)
    |(UINT32)((UINT32) SYS_IRQ << 25U)
    |(UINT32)((UINT32) SYS_IRQ << 26U)
    |(UINT32)((UINT32) SYS_IRQ << 27U)
    |(UINT32)((UINT32) SYS_IRQ << 28U)
    |(UINT32)((UINT32) SYS_IRQ << 29U)
    |(UINT32)((UINT32) SYS_IRQ << 30U)
    |(UINT32)((UINT32) SYS_IRQ << 31U);
    
    
    vimREG->FIRQPR2 =(uint32)((uint32) SYS_IRQ << 0U)
    |(UINT32)((UINT32) SYS_IRQ << 1U)
    |(UINT32)((UINT32) SYS_IRQ << 2U)
    |(UINT32)((UINT32) SYS_IRQ << 3U)
    |(UINT32)((UINT32) SYS_IRQ << 4U)
    |(UINT32)((UINT32) SYS_IRQ << 5U)
    |(UINT32)((UINT32) SYS_IRQ << 6U)
    |(UINT32)((UINT32) SYS_IRQ << 7U)
    |(UINT32)((UINT32) SYS_IRQ << 8U)
    |(UINT32)((UINT32) SYS_IRQ << 9U)
    |(UINT32)((UINT32) SYS_IRQ << 10U)
    |(UINT32)((UINT32) SYS_IRQ << 11U)
    |(UINT32)((UINT32) SYS_IRQ << 12U)
    |(UINT32)((UINT32) SYS_IRQ << 13U)
    |(UINT32)((UINT32) SYS_IRQ << 14U)
    |(UINT32)((UINT32) SYS_IRQ << 15U)
    |(UINT32)((UINT32) SYS_IRQ << 16U)
    |(UINT32)((UINT32) SYS_IRQ << 17U)
    |(UINT32)((UINT32) SYS_IRQ << 18U)
    |(UINT32)((UINT32) SYS_IRQ << 19U)
    |(UINT32)((UINT32) SYS_IRQ << 20U)
    |(UINT32)((UINT32) SYS_IRQ << 21U)
    |(UINT32)((UINT32) SYS_IRQ << 22U)
    |(UINT32)((UINT32) SYS_IRQ << 23U)
    |(UINT32)((UINT32) SYS_IRQ << 24U)
    |(UINT32)((UINT32) SYS_IRQ << 25U)
    |(UINT32)((UINT32) SYS_IRQ << 26U)
    |(UINT32)((UINT32) SYS_IRQ << 27U)
    |(UINT32)((UINT32) SYS_IRQ << 28U)
    |(UINT32)((UINT32) SYS_IRQ << 29U)
    |(UINT32)((UINT32) SYS_IRQ << 30U)
    |(UINT32)((UINT32) SYS_IRQ << 31U);
    
    vimREG->FIRQPR3 =(uint32)((uint32) SYS_IRQ << 0U)
    |(UINT32)((UINT32) SYS_IRQ << 1U)
    |(UINT32)((UINT32) SYS_IRQ << 2U)
    |(UINT32)((UINT32) SYS_IRQ << 3U)
    |(UINT32)((UINT32) SYS_IRQ << 4U)
    |(UINT32)((UINT32) SYS_IRQ << 5U)
    |(UINT32)((UINT32) SYS_IRQ << 6U)
    |(UINT32)((UINT32) SYS_IRQ << 7U)
    |(UINT32)((UINT32) SYS_IRQ << 8U)
    |(UINT32)((UINT32) SYS_IRQ << 9U)
    |(UINT32)((UINT32) SYS_IRQ << 10U)
    |(UINT32)((UINT32) SYS_IRQ << 11U)
    |(UINT32)((UINT32) SYS_IRQ << 12U)
    |(UINT32)((UINT32) SYS_IRQ << 13U)
    |(UINT32)((UINT32) SYS_IRQ << 14U)
    |(UINT32)((UINT32) SYS_IRQ << 15U)
    |(UINT32)((UINT32) SYS_IRQ << 16U)
    |(UINT32)((UINT32) SYS_IRQ << 17U)
    |(UINT32)((UINT32) SYS_IRQ << 18U)
    |(UINT32)((UINT32) SYS_IRQ << 19U)
    |(UINT32)((UINT32) SYS_IRQ << 20U)
    |(UINT32)((UINT32) SYS_IRQ << 21U)
    |(UINT32)((UINT32) SYS_IRQ << 22U)
    |(UINT32)((UINT32) SYS_IRQ << 23U)
    |(UINT32)((UINT32) SYS_IRQ << 24U)
    |(UINT32)((UINT32) SYS_IRQ << 25U)
    |(UINT32)((UINT32) SYS_IRQ << 26U)
    |(UINT32)((UINT32) SYS_IRQ << 27U)
    |(UINT32)((UINT32) SYS_IRQ << 28U)
    |(UINT32)((UINT32) SYS_IRQ << 29U)
    |(UINT32)((UINT32) SYS_IRQ << 30U)
    |(UINT32)((UINT32) SYS_IRQ << 31U);
    
    
    /*启用中断*/
    vimREG->REQMASKSET0 =(uint32)((uint32) 1U <<0U)
    |(uint32)((uint32) 1U << 1U)
    |(uint32)((uint32) 1U << 2U)
    |(UINT32)((UINT32) 1U <<3U)
    |(uint32)((uint32) 1U <<4U)
    |(UINT32)((UINT32) 1U <<5U)
    |(UINT32)((UINT32) 0U << 6U)
    |(UINT32)((UINT32) 0U << 7U)
    |(UINT32)((UINT32) 0U << 8U)
    |(UINT32)((UINT32) 0U << 9U)
    |(UINT32)((UINT32) 0U << 10U)
    |(UINT32)((UINT32) 0U << 11U)
    |(UINT32)((UINT32) 0U << 12U)
    |(UINT32)((UINT32) 0U << 13U)
    |(UINT32)((UINT32) 0U << 14U)
    |(UINT32)((UINT32) 0U << 15U)
    |(UINT32)((UINT32) 0U <<16U)
    |(UINT32)((UINT32) 0U << 17U)
    |(UINT32)((UINT32) 0U << 18U)
    |(UINT32)((UINT32) 0U << 19U)
    |(UINT32)((UINT32) 0U << 20U)
    |(UINT32)((UINT32) 0U << 21U)
    |(UINT32)((UINT32) 0U << 22U)
    |(UINT32)((UINT32) 0U <<23U)
    |(UINT32)((UINT32) 0U << 24U)
    |(UINT32)((UINT32) 0U << 25U)
    |(UINT32)((UINT32) 0U << 26U)
    |(UINT32)((UINT32) 0U << 27U)
    |(UINT32)((UINT32) 0U << 28U)
    |(UINT32)((UINT32) 0U << 29U)
    |(UINT32)((UINT32) 0U << 30U)
    |(uint32)((uint32) 0U << 31U);
    
    vimREG->REQMASKSET1 =(uint32)((uint32) 0U << 0U)
    |(uint32)((uint32) 0U << 1U)
    |(uint32)((uint32) 0U << 2U)
    |(UINT32)((UINT32) 0U << 3U)
    |(uint32)((uint32) 0U << 4U)
    |(UINT32)((UINT32) 0U << 5U)
    |(UINT32)((UINT32) 0U << 6U)
    |(UINT32)((UINT32) 0U << 7U)
    |(UINT32)((UINT32) 0U << 8U)
    |(UINT32)((UINT32) 0U << 9U)
    |(UINT32)((UINT32) 0U << 10U)
    |(UINT32)((UINT32) 0U << 11U)
    |(UINT32)((UINT32) 0U << 12U)
    |(UINT32)((UINT32) 0U << 13U)
    |(UINT32)((UINT32) 0U << 14U)
    |(UINT32)((UINT32) 0U << 15U)
    |(UINT32)((UINT32) 0U <<16U)
    |(UINT32)((UINT32) 0U << 17U)
    |(UINT32)((UINT32) 0U << 18U)
    |(UINT32)((UINT32) 0U << 19U)
    |(UINT32)((UINT32) 0U << 20U)
    |(UINT32)((UINT32) 0U << 21U)
    |(UINT32)((UINT32) 0U << 22U)
    |(UINT32)((UINT32) 0U <<23U)
    |(UINT32)((UINT32) 0U << 24U)
    |(UINT32)((UINT32) 0U << 25U)
    |(UINT32)((UINT32) 0U << 26U)
    |(UINT32)((UINT32) 0U << 27U)
    |(UINT32)((UINT32) 0U << 28U)
    |(UINT32)((UINT32) 0U << 29U)
    |(UINT32)((UINT32) 0U << 30U)
    |(uint32)((uint32) 0U << 31U);
    
    vimREG->REQMASKSET2 =(uint32)((uint32) 0U << 0U)
    |(uint32)((uint32) 0U << 1U)
    |(uint32)((uint32) 0U << 2U)
    |(UINT32)((UINT32) 0U << 3U)
    |(uint32)((uint32) 0U << 4U)
    |(UINT32)((UINT32) 0U << 5U)
    |(UINT32)((UINT32) 0U << 6U)
    |(UINT32)((UINT32) 0U << 7U)
    |(UINT32)((UINT32) 0U << 8U)
    |(UINT32)((UINT32) 0U << 9U)
    |(UINT32)((UINT32) 0U << 10U)
    |(UINT32)((UINT32) 0U << 11U)
    |(UINT32)((UINT32) 0U << 12U)
    |(UINT32)((UINT32) 0U << 13U)
    |(UINT32)((UINT32) 0U << 14U)
    |(UINT32)((UINT32) 0U << 15U)
    |(UINT32)((UINT32) 0U <<16U)
    |(UINT32)((UINT32) 0U << 17U)
    |(UINT32)((UINT32) 0U << 18U)
    |(UINT32)((UINT32) 0U << 19U)
    |(UINT32)((UINT32) 0U << 20U)
    |(UINT32)((UINT32) 0U << 21U)
    |(UINT32)((UINT32) 0U << 22U)
    |(UINT32)((UINT32) 0U <<23U)
    |(UINT32)((UINT32) 0U << 24U)
    |(UINT32)((UINT32) 0U << 25U)
    |(UINT32)((UINT32) 0U << 26U)
    |(UINT32)((UINT32) 0U << 27U)
    |(UINT32)((UINT32) 0U << 28U)
    |(UINT32)((UINT32) 0U << 29U)
    |(UINT32)((UINT32) 0U << 30U)
    |(uint32)((uint32) 0U << 31U);
    
    vimREG->REQMASKSET3 =(uint32)((uint32) 0U << 0U)
    |(uint32)((uint32) 0U << 1U)
    |(uint32)((uint32) 0U << 2U)
    |(UINT32)((UINT32) 0U << 3U)
    |(uint32)((uint32) 0U << 4U)
    |(UINT32)((UINT32) 0U << 5U)
    |(UINT32)((UINT32) 0U << 6U)
    |(UINT32)((UINT32) 0U << 7U)
    |(UINT32)((UINT32) 0U << 8U)
    |(UINT32)((UINT32) 0U << 9U)
    |(UINT32)((UINT32) 0U << 10U)
    |(UINT32)((UINT32) 0U << 11U)
    |(UINT32)((UINT32) 0U << 12U)
    |(UINT32)((UINT32) 0U << 13U)
    |(UINT32)((UINT32) 0U << 14U)
    |(UINT32)((UINT32) 0U << 15U)
    |(UINT32)((UINT32) 0U <<16U)
    |(UINT32)((UINT32) 0U << 17U)
    |(UINT32)((UINT32) 0U << 18U)
    |(UINT32)((UINT32) 0U << 19U)
    |(UINT32)((UINT32) 0U << 20U)
    |(UINT32)((UINT32) 0U << 21U)
    |(UINT32)((UINT32) 0U << 22U)
    |(UINT32)((UINT32) 0U <<23U)
    |(UINT32)((UINT32) 0U << 24U)
    |(UINT32)((UINT32) 0U << 25U)
    |(UINT32)((UINT32) 0U << 26U)
    |(UINT32)((UINT32) 0U << 27U)
    |(UINT32)((UINT32) 0U << 28U)
    |(UINT32)((UINT32) 0U << 29U)
    |(UINT32)((UINT32) 0U << 30U)
    |(uint32)((uint32) 0U << 31U);
    
    /*设置捕获事件源*/
    vimREG->CAPEVT =((uint32)((uint32) 0U << 0U)
    |(uint32)(((uint32) 0U << 16U));
    }
    
    /**@fn void vimChannelMap (uint32请求、uint32通道、t_isrFuncptr 处理程序)
    *@将所选中断请求映射到所选通道
    *
    *@param[in]请求:中断请求编号2.95*
    @通道
    处理程序中的 param[para.95]μ s *通道:param[param]μ@通道.am[param] 中断处理程序的地址
    *
    此函数将所选中断请求映射到所选通道。
    *
    //
    * sourceId:VIM_sourceId_002 *//
    * DesignId:VIM_DesignId_002 *//
    //*要求:HL_SR101 */
    void vimChannelMap (uint32请求、uint32通道、t_isrFuncptr 处理程序)
    {
    uint32 i、j;
    I =通道>> 2U; /*找到要配置的寄存器*/
    J =通道-(I << 2U); /*找到*/类型的偏移量
    J = 3U - j; /*反转字节顺序 *
    J = j << 3U; /*查找位位置 *
    
    /*将所需的中断请求映射到所需的通道*/
    vimREG->CHANCTRL[i]&=~(uint32)((uint32) 0xFFU << j);
    vimREG->CHANCTRL[i]|=(请求<< j);
    
    /*更新 VIMRAM*/
    vimRAM->ISR[通道+ 1U]=处理程序;
    }//**
    
    @fn void vimEnableInterrupt (uint32通道、布尔 inttype)
    *@简短启用所选通道的中断
    *
    *@param[in]通道:VIM 通道编号2..95
    *@param[in] inttype:中断类型
    * - SYS_IRQ:所选通道将被启用为 IRQ
    * - SYS_FIQ:所选通道将启用为 FIQ
    *
    *此函数将启用所选通道的中断。
    *
    //
    * sourceId:VIM_sourceId_003 *//
    * DesignId:VIM_DesignId_003 *//
    //*要求:HL_SR102 */
    void vimEnableInterrupt (uint32通道、systemInterrupt_t inttype)
    {
    IF (通道>= 64U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR2 &=~(uint32)((uint32) 1U <<(channel-64U));
    }
    其他
    {
    vimREG->FIRQPR2|=((uint32) 1U <<(channel-64U));
    }
    vimREG->REQMASKSET2 =(uint32) 1U <<(通道-64U);
    }
    否则、如果(通道>= 32U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR1 &=~(uint32)((uint32) 1U <<(channel-32U));
    }
    其他
    {
    vimREG->FIRQPR1|=((uint32) 1U <<(channel-32U));
    }
    vimREG->REQMASKSET1 =(uint32) 1U <<(通道-32U);
    }
    否则(通道>= 2U)
    {
    if (inttype == SYS_IRQ)
    {
    vimREG->FIRQPR0 &=~(uint32)((uint32) 1U <<通道);
    }
    其他
    {
    vimREG->FIRQPR0 |=((uint32) 1U <<通道);
    }
    vimREG->REQMASKSET0 =(uint32) 1U <<通道;
    }
    其他
    {
    /*空*/
    }
    }
    
    //@fn void vimDisableInterrupt (uint32通道)
    *@所选通道的短暂禁用中断
    *
    *@param[in]通道:VIM 通道编号2..95
    *
    *此函数将禁用所选通道的中断。
    *
    //
    * sourceId:VIM_sourceId_004 *//
    * DesignId:VIM_DesignId_004 *//
    //*要求:HL_SR103 */
    void vimDisableInterrupt (uint32通道)
    {
    IF (通道>= 64U)
    {
    vimREG->REQMASKCLR2 =(uint32) 1U <<(通道-64U);
    }
    否则、如果(通道>= 32U)
    {
    vimREG->REQMASKCLR1 =(uint32) 1U <<(通道-32U);
    }
    否则(通道>= 2U)
    {
    vimREG->REQMASKCLR0 =(uint32) 1U <<通道;
    }
    其他
    {
    /*空*/
    }
    }
    
    //*用户代码开始(1)*/
    *用户代码结束*/
    
    @fn void vimGetConfigValue (vim_config_reg_t * config_reg,CONFIG_value_type_t type)
    *@brief 获取配置寄存器的初始值或当前值
    *
    *@param[in]* CONFIG_reg: 指向需要存储配置寄存器初始值或当前值的结构的指针
    *@param[in]类型: 需要存储配置寄存器的初始值还是当前值
    * - InitialValue:配置寄存器的初始值将存储在 CONFIG_reg
    *指向的结构中 - CurrentValue:配置寄存器的初始值将存储在 CONFIG_reg 指向的结构中
    *
    此函数将配置
    *寄存器的初始值或当前值(取决于参数'type')复制到 CONFIG_reg 指向的结构
    中*
    //
    * sourceId: VIM_sourceId_005 */*
    DesignId:VIM_DesignId_005 */*
    要求:HL_SR104 */
    void vimGetConfigValue (vim_config_reg_t * CONFIG_reg,CONFIG_value_type_t type)
    {
    if (type == InitialValue)
    {
    CONFIG_REG->CONFIG_FIRQPR0 = VIM_FIRQPR0_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR1 = VIM_FIRQPR1_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR2 = VIM_FIRQPR2_CONFIGVALUE;
    CONFIG_REG->CONFIG_FIRQPR3 = VIM_FIRQPR3_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET0 = VIM_REQMASKSET0_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET1 = VIM_REQMASKSET1_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET2 = VIM_REQMASKSET2_CONFIGVALUE;
    CONFIG_REG->CONFIG_REQMASKSET3 = VIM_REQMASKSET3_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET0 = VIM_WAKEMASKSET0_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET1 = VIM_WAKEMASKSET1_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET2 = VIM_WAKEMASKSET2_CONFIGVALUE;
    CONFIG_REG->CONFIG_WAKEMASKSET3 = VIM_WAKEMASKSET3_CONFIGVALUE;
    CONFIG_REG->CONFIG_CAPEVT = VIM_CAPEVT_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[0U]= VIM_CHANCTRL0_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[1U]= VIM_CHANCTRL1_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[2U]= VIM_CHANCTRL2_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[3U]= VIM_CHANCTRL3_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[4U]= VIM_CHANCTRL4_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[5U]= VIM_CHANCTRL5_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[6U]= VIM_CHANCTRL6_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[7U]= VIM_CHANCTRL7_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[8U]= VIM_CHANCTRL8_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[9U]= VIM_CHANCTRL9_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[10U]= VIM_CHANCTRL10_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[11U]= VIM_CHANCTRL11_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[12U]= VIM_CHANCTRL12_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[13U]= VIM_CHANCTRL13_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[14U]= VIM_CHANCTRL14_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[15U]= VIM_CHANCTRL15_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[16U]= VIM_CHANCTRL16_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[17U]= VIM_CHANCTRL17_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[18U]= VIM_CHANCTRL18_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[19U]= VIM_CHANCTRL19_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[20U]= VIM_CHANCTRL20_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[21U]= VIM_CHANCTRL21_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[22U]= VIM_CHANCTRL22_CONFIGVALUE;
    CONFIG_REG->CONFIG_CHANCTRL[23U]= VIM_CHANCTRL23_CONFIGVALUE;
    }
    其他
    {
    /*SAFETYMCUSW 134 S MR:12.2. "LDRA 工具问题"*/
    CONFIG_REG->CONFIG_FIRQPR0 = vimREG->FIRQPR0;
    CONFIG_REG->CONFIG_FIRQPR1 = vimREG->FIRQPR1;
    CONFIG_REG->CONFIG_FIRQPR2 = vimREG->FIRQPR2;
    CONFIG_REG->CONFIG_FIRQPR3 = vimREG->FIRQPR3;
    CONFIG_REG->CONFIG_REQMASKSET0 = vimREG->REQMASKSET0;
    CONFIG_REG->CONFIG_REQMASKSET1 = vimREG->REQMASKSET1;
    CONFIG_REG->CONFIG_REQMASKSET2 = vimREG->REQMASKSET2;
    CONFIG_REG->CONFIG_REQMASKSET3 = vimREG->REQMASKSET3;
    CONFIG_REG->CONFIG_WAKEMASKSET0 = vimREG->WAKEMASKSET0;
    CONFIG_REG->CONFIG_WAKEMASKSET1 = vimREG->WAKEMASKSET1;
    CONFIG_REG->CONFIG_WAKEMASKSET2 = vimREG->WAKEMASKSET2;
    CONFIG_REG->CONFIG_WAKEMASKSET3 = vimREG->WAKEMASKSET3;
    CONFIG_REG->CONFIG_CAPEVT = vimREG->CAPEVT;
    CONFIG_REG->CONFIG_CHANCTRL[0U]= vimREG->CHANCTRL[0U];
    CONFIG_REG->CONFIG_CHANCTRL[1U]= vimREG->CHANCTRL[1U];
    CONFIG_REG->CONFIG_CHANCTRL[2U]= vimREG->CHANCTRL[2U];
    CONFIG_REG->CONFIG_CHANCTRL[3U]= vimREG->CHANCTRL[3U];
    CONFIG_REG->CONFIG_CHANCTRL[4U]= vimREG->CHANCTRL[4U];
    CONFIG_REG->CONFIG_CHANCTRL[5U]= vimREG->CHANCTRL[5U];
    CONFIG_REG->CONFIG_CHANCTRL[6U]= vimREG->CHANCTRL[6U];
    CONFIG_REG->CONFIG_CHANCTRL[7U]= vimREG->CHANCTRL[7U];
    CONFIG_REG->CONFIG_CHANCTRL[8U]= vimREG->CHANCTRL[8U];
    CONFIG_REG->CONFIG_CHANCTRL[9U]= vimREG->CHANCTRL[9U];
    CONFIG_REG->CONFIG_CHANCTRL[10U]= vimREG->CHANCTRL[10U];
    CONFIG_REG->CONFIG_CHANCTRL[11U]= vimREG->CHANCTRL[11U];
    CONFIG_REG->CONFIG_CHANCTRL[12U]= vimREG->CHANCTRL[12U];
    CONFIG_REG->CONFIG_CHANCTRL[13U]= vimREG->CHANCTRL[13U];
    CONFIG_REG->CONFIG_CHANCTRL[14U]= vimREG->CHANCTRL[14U];
    CONFIG_REG->CONFIG_CHANCTRL[15U]= vimREG->CHANCTRL[15U];
    CONFIG_REG->CONFIG_CHANCTRL[16U]= vimREG->CHANCTRL[16U];
    CONFIG_REG->CONFIG_CHANCTRL[17U]= vimREG->CHANCTRL[17U];
    CONFIG_REG->CONFIG_CHANCTRL[18U]= vimREG->CHANCTRL[18U];
    CONFIG_REG->CONFIG_CHANCTRL[19U]= vimREG->CHANCTRL[19U];
    CONFIG_REG->CONFIG_CHANCTRL[20U]= vimREG->CHANCTRL[20U];
    CONFIG_REG->CONFIG_CHANCTRL[21U]= vimREG->CHANCTRL[21U];
    CONFIG_REG->CONFIG_CHANCTRL[22U]= vimREG->CHANCTRL[22U];
    CONFIG_REG->CONFIG_CHANCTRL[23U]= vimREG->CHANCTRL[23U];
    
    
    
    }
    }
    
    
    #pragma CODE_STATE (vimParityErrorHandler,32)
    #pragma INTERRUPT (vimParityErrorHandler,IRQ)
    #pragma weak (vimParityErrorHandler)
    
    /* sourceId:vIM_sourceId_006 *
    ////* DesignErrorId:source_DesignId_006 *
    //////要求:HL_SR105 */vimity ErrorHandler
    
    { vimvoid parityvoid
    uint32 vec;
    
    /*标识损坏的地址*/
    uint32 error_addr = VIM_ADDERR;
    
    /*识别信道编号*/
    uint32 error_channel=((error_addr 和0x1FFU)>> 2U);
    
    if (ERROR_CHANNEL >= VIM_CHANNELS)
    {
    /*指数已超出债券*/
    /*此条件不应为真、因为仅硬件实现了 VIM_CHANNELS (96)通道*/
    /*但是,由于防御性编程,添加了它*/*
    用户代码开始(2)*/*
    用户代码结束*/
    }
    其他
    {
    /*更正损坏的位置*/
    vimRAM->ISR[ERROR_CHANNEY]= s_vim_init[ERROR_CHANNEY];
    
    /*清除奇偶校验错误标志*/
    VIM_PARFLG = 1U;
    
    /*禁用并启用最高优先级的挂起通道*/
    if (vimREG->FIQINDEX!= 0U)
    {
    vec = vimREG->FIQINDEX - 1U;
    }
    其他
    {
    /*SAFETYMCUSW 134 S MR:12.2. "读取32位易失性寄存器"*/
    vec = vimREG->IRQINDEX - 1U;
    }
    if (VEC ==0U)
    {
    vimREG->INTREQ0 = 1U;
    vec = esmREG->IOFFHR - 1U;
    
    如果(VEC < 32U)
    {
    esmREG->SR1[0U]=(uint32) 1U << VEC;
    esmGroup1Notification (VEC);
    }
    如果(VEC < 64U)
    {
    esmREG->SR1[1U]=(uint32) 1U <<(vec-32U);
    esmGroup2Notification (VEC-32U);
    }
    如果(VEC < 96U)
    {
    esmREG->SR4[0U]=(uint32) 1U <<(vec-64U);
    esmGroup1Notification (VEC-32U);
    }
    其他
    {
    esmREG->SR4[1U]=(uint32) 1U <<(vec-96U);
    esmGroup2Notification (VEC-64U);
    }
    }
    如果(VEC < 32U)
    {
    vimREG->REQMASKCLR0 =(uint32) 1U << VEC;
    vimREG->REQMASKSET0 =(uint32) 1U << VEC;
    }
    如果(VEC < 64U)
    {
    vimREG->REQMASKCLR1 =(uint32) 1U <<(vec-32U);
    vimREG->REQMASKSET1 =(uint32) 1U <<(vec-32U);
    }
    其他
    {
    vimREG->REQMASKCLR2 =(uint32) 1U <<(vec-64U);
    vimREG->REQMASKSET2 =(uint32) 1U <<(vec-64U);
    }
    }
    

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

    有人可以帮助我吗?

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

    RTI 计时器用于对 ADC 值进行采样并平衡 TMS570 BMS TI 设计中的电池:

    每 500ms 对电池进行一次采样

    2. 平衡目标电池1秒钟,然后放松3秒钟

    请参阅此 TI 参考设计中的示例代码: http://www.ti.com/tool/TIDM-TMS570BMS?keyMatch=TI%20BMS%20DESIGN&tisearch=Search-EN-everything