工具/软件:Code Composer Studio
您好!
我使用的是 TMS570和 BQ76PL455 EVM。
现在、我尝试添加一些计时器和中断来进行代码采样。 但是、似乎只有一个中断有效。
如何解决此问题?
/**@文件 RTI.c
*@RTI 驱动程序源文件简介
*@日期2013年7月25日
*@版本03.06.00
*
*此文件包含:
*- API 函数
*-中断处理
程序*。
与 RTI 驱动程序相关的*。
*/
/*(c) Texas Instruments 2009-2013、保留所有权利。 //
//*用户代码开始(0)*//
//*用户代码结束*//
//*包含文件*/
#include "rti.h"
#include "sys_vim.h"
//*用户代码开始(1)*//
*//*用户代码结束*//
//@fn void rtiInit (void)
*@简短初始化 RTI 驱动
程序**此函数初始化 RTI 驱动程序。
*
*/
/*用户代码开始(2)*/
/*用户代码结束*/
void rtiInit (void)
{
*/*用户代码开始(3)*/
*用户代码结束*/
/**@b 初始化@b RTI1:*/
/**-设置 NTU 源、调试选项和禁用两个计数器块*/
rtiREG1->GCTRL =(1U <<16U)| 0x000000000000U;
/**-为自由运行计数器0设置时基*/
rtiREG1->TBCTRL = 0x000000000000U;
/**-启用/禁用两个计数器块的捕获事件源*/
rtiREG1->CAPCTRL = 0U | 0U;
/**-设置输入源比较0-3 */
rtiREG1->COMPCTRL = 0x00001000U | 0x00000100U | 0x000000000000U | 0x0000000000000000;
/**-重置计数器0 */
rtiREG1->CNT[0U].ucx = 0x00000000U;
/**-重置自由运行计数器0 */
rtiREG1->CNT[0U].FRCx = 0x000000000000U;
/**-设置计数器0比较值
* - 0x00000000:2^32分频
* -0x00000001-0xFFFFFFFF:除以(CPU0 + 1)
*
rtiREG1->CNT[0U].CPUx = 7U;
/**-重置计数器1 */
rtiREG1->CNT[1U].ucx = 0x00000000U;
/**-重置自由运行计数器1 */
rtiREG1->CNT[1U].FRCx = 0x00000000U;
/**-设置计数器1比较值
* - 0x00000000:2^32分频
* -0x00000001-0xFFFFFFFF:除以(CPUC1 + 1)
*
rtiREG1->CNT[1U].CPUx = 7U;
/**-设置比较0值。 此值与选定的自由运行计数器进行比较。 *
rtiREG1->CMP[0U].Compx = 10000U;
/**-安装程序更新比较0值。 该值将添加到每个比较匹配的比较0值中。 *
rtiREG1->CMP[0U].UCPx = 10000U;
/**-设置比较1值。 此值与选定的自由运行计数器进行比较。 *
rtiREG1->CMP[1U].Compx = 50000U;
/**-设置更新比较1值。 该值将添加到每个比较匹配的比较1值中。 *
rtiREG1->CMP[1U].UCPx = 50000U;
/**-设置比较2值。 此值与选定的自由运行计数器进行比较。 *
rtiREG1->CMP[2U].Compx = 80000U;
/**-安装程序更新比较2值。 该值将添加到每个比较匹配的比较2值中。 *
rtiREG1->CMP[2U].UDCPx = 80000U;
/**-设置比较3值。 此值与选定的自由运行计数器进行比较。 *
rtiREG1->CMP[3U].Compx = 100000U;
/**-安装程序更新比较3值。 该值将添加到每个比较匹配的比较3值中。 *
rtiREG1->CMP[3U].UCPx = 100000U;
/**-清除所有挂起的中断*/
rtiREG1->INTFLAG = 0x0007000FU;
/**-禁用所有中断*/
rtiREG1->CLEARINTENA= 0x00070F0FU;
/**@注意,必须先调用此函数,然后才能使用驱动程序。\n
* 此函数必须在特权模式下执行。\n
* 此函数不会启动计数器。
//
//*用户代码开始(4)*//
//*用户代码结束*/}//*
用户代码开始(5)*/
*用户代码结束*//
**@fn void rtiStartCounter (UINT32 counter)
*@brief 启动 RTI 计数器块
*@param[in] counter 选择要启动的计数器块
:* - rtiCOUNT TER_BLOCK0:RTI 计数器块0将开始
* - rtiCOUNTER_Block1:RTI 计数器块1将被启动
*
*此函数启动所选 RTI 模块的所选计数器块。
//
////*用户代码开始(6)*//
//*用户代码结束*/
void rtiStartCounter (UINT32 counter)
{//
用户代码开始(7)*/
*用户代码结束*/
rtiREG1->GCTRL |=(1U <<(计数器和3U));
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。
//
//*用户代码开始(8)*//
//*用户代码结束*/}//*
用户代码开始(9)*/
*用户代码结束*//
//**@fn void rtiStopCounter (UINT32 counter)
*@短暂停止 RTI 计数器块
*@param[in] counter 选择要停止的计数器
:* - rtiCOUNTER_BLOCK0:RTI 计数器块0将被停止
* - rtiCOUNTER_Block1:RTI 计数器块1将被停止
*
*此函数停止所选 RTI 模块的所选计数器块。
//
////*用户代码开始(10)*//
//*用户代码结束*/
void rtiStopCounter (UINT32 counter)
{//
用户代码开始(11)*//
*用户代码结束*/
rtiREG1->GCTRL &=~(1U <<(计数器和3U));
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。
//
//*用户代码开始(12)*//
//*用户代码结束*/}//*
用户代码开始(13)*/
*用户代码结束*//
//**@fn uint32 rtiResetCounter (Uint32 counter)
*@简短复位 RTI 计数器块
*@param[in]计数器选择要复位的计数器块
:* - rtiCOUNTER_BLOCK0:RTI 计数器块0将被复位
* - rtiCOUNTER_Block1:RTI 计数器块1将被复位
*@返回函数将返回:
* - 0:计数器复位失败时
* - 1:当计数器复位成功
时*
*此函数将复位所选 RTI 模块的所选计数器块。
//
//*用户代码开始(14)*/
//*用户代码结束*/
uint32 rtiResetCounter (uint32 counter)
{
uint32成功= 0U;
/*用户代码开始(15)*/
/*用户代码结束*/
/*SAFETYMCUSW 134 S MR:12.2. "硬件状态位读取检查"*/
如果(!(rtiREG1->GCTRL &(1U <<(计数器和3U)))!= 0U)
{
rtiREG1->CNT[计数器].ucx = 0x00000000U;
rtiREG1->CNT[计数器].FRCx = 0x000000000000;
成功= 1U;
}
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。\n
* 所选的计数器块必须在复位前停止。
*/
*用户代码开始(16)*/
*用户代码结束*/
返回成功;
}
//用户代码开始(17)*//
//*用户代码结束*/**
@fn void rtiSetPeriod (uint32比较、uint32周期)
*@简短设置 RTI 比较的新周期
*@param[in]比较选择比较更改周期
:* - rtiCOMPARE0:RTI 比较0将更改周期
* - rtiCOMPARE1:RTI 比较1将更改周期
* - rtiCOMPARE2:RTI 比较2将更改周期
* - rtiCOMPARE3:RTI 比较3将更改周期
*@param[in]周期[节拍-1]:
*中的新周期 - 0x00000000:1分频
* - n:除以 n + 1
*
*此函数将更改所选比较的周期。
//
////*用户代码开始(18)*//
//*用户代码结束*/
void rtiSetPeriod (uint32比较,uint32周期)
{//
用户代码开始(19)*//
*用户代码结束*/
rtiREG1->CMP[比较].UDCPx =周期;
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。\n
* 当相应的计数器块未停止时,\n
* 该期间将在旧期间的下一个比较匹配时发生变化。
//
//*用户代码开始(20)*//
//*用户代码结束*/}//*
用户代码开始(21)*/
*用户代码结束*//
//**@fn uint32 rtiGetPeriod (Uint32比较)
*@简短获取 RTI 比较的当前周期
*@param[in]比较选择比较以返回当前周期
:* - rtiCOMPARE0:RTI COMPARE0将返回当前周期
* - rtiCOMPARE1:RTI 比较1将返回当前周期
* - rtiCOMPARE2:RTI 比较2将返回当前周期
* - rtiCOMPARE3:RTI 比较3将返回当前周期
*@返回所选比较的当前周期[刻度- 1]:
* - 0x00000000:1分频
* - n:除以 n + 1
*
*此函数将返回所选比较的周期。
//
//*用户代码开始(22)*/
//*用户代码结束*/
uint32 rtiGetPeriod (uint32比较)
{
uint32周期;
//用户代码开始(23)*/
//用户代码结束*/
周期= rtiREG1->CMP[比较].UCPx;
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。
*/
*用户代码开始(24)*/
*用户代码结束*/
返回周期;
}
//用户代码开始(25)*//
//*用户代码结束*//
@fn uint32 rtiGetCurrentTick (Uint32比较)
*@简短获取 RTI 比较的当前节拍
*@param[in]比较选择比较以返回当前节拍:
* - rtiCOMPARE0:RTI COMPARE 0将返回当前节拍
* - rtiCOMPARE1:RTI 比较1将返回当前的节拍
* - rtiCOMPARE2:RTI 比较2将返回当前节拍
* - rtiCOMPARE3:RTI 比较3将返回当前节拍
*@返回所选比较的当前节拍
*
此函数将返回所选比较的当前节拍。
//
//*用户代码开始(26)*/
//*用户代码结束*/
uint32 rtiGetCurrentTick (uint32比较)
{
uint32 tick;
uint32计数器=((rtiREG1->COMPCTRL &(1U <<(比较<< 2U)))!=0U)? 1U:0U;
uint32 RTI_CNT_FRCx = rtiREG1->CNT[计数器].FRCx;
uint32 RTI_CMP_COMPx = rtiREG1->CMP[COMPARILE].COMPx;
uint32 RTI_CMP_UDCPx = rtiREG1->CMP[COMPARIENT].UDx
*代码
*/用户代码**/用户代码**/开始代码*/ UDCPx *
Tick = RTI_CNT_FRCx -(RTI_CMP_COMPx - RTI_CMP_UDCPx);
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。
*/
*用户代码开始(28)*/
*用户代码结束*/
返回 tick;
}
//用户代码开始(29)*//
//*用户代码结束*//
**@fn void dwdInit (uint16 dwdPreload)
*@简要初始化 DWD 过期周期
*@param[in] dwdPreload DWD 过期时间的预加载值。
* - Texp =(dwdPreload +1)/RTICLK
* - n:除以 n + 1
*
*可以调用此函数来设置 DWD 到期
时间*
*/
void dwInit (uint16 dwdPreload)
{
*用户代码开始(30)*/
*用户代码结束*/
/*清除冲突(如果已经存在)*/rtiREG1->WDSTATUS
= 0xFFU;
rtiREG1->DWDPRLD = dw预先 加载;
/*用户代码开始(31)*/*
/*用户代码结束*/
}/*
用户代码开始(32)*/*
/
**@fn dwwdpruit、wwdit pract_wwdit、wwdidt_wwdit、wwdit、wwdumt_pract_wwdit、wwdit、wwdage_inaction
*@简单初始化 DWD 过期周期
*@param[in]反应 DWWD 反应(如果看门狗装置在时间窗口之外被处理)。
* - Generate_Reset
* - Generate_NMI
*@param[in] dwdPreload DWWD 预载值、用于看门狗失效时间。
* - Texp =(dwdPreload +1)/RTICLK
* - n:除以 n + 1
*@param[in] window_size DWWD 时间窗口大小
* - size_100_percent
* - size_50_percent
* - size_25_percent
* - size_12_5_percent
* - size_6_25_percent
* - size_3_125_percent
*
*可以调用此函数来设置 DWD 过期
时间*
*/
void dwwdInit (dwwdRetact_t REACTION、uint16 WindowdPreload、dwdwwSize_t Window_size)
{
//*
用户代码开始(33)*//*/*用户代码结束*
/*清除已存在的违规*/
rtiREG1->WDSTATUS = 0xFFU;
rtiREG1->WWDSIZECTRL =(uint32) window_size;
rtiREG1->DWDPRLD =(uint32) dwdPreload;
rtiREG1->WWDRXNCTRL =(uint32)反应;
/* USER CODE BEGIN (34)*/
//* USER CODE END */
//* USER CODE BEGIN (35)*///
* USER CODE END *///@fn UINT32 dwwdGetCurrentDownCounter (void)
*@brief 获取当前 DWWD 减计数器
*@返回所选比较
的当前节拍*
*此函数将获取当前计数器 DWWD 递减计数器值。
*
/
uint32 dwwdGetCurrentDownCounter (void)
{
//用户代码开始(36)*/
//*用户代码结束*
return (rtiREG1->DWDCNTR);
//用户代码 begin (37)*/
//*用户代码 end *
/
*用户代码 begin (38)*/
//*用户代码 end *
//@fn void dwdCounterEnable (void)
*@brief DWD
*
**此函数将启用 DWD 计数器。
*
*/
void dwCounterEnable (void)
{
//*用户代码开始(39)*/
//*用户代码结束*/
rtiREG1->DWDCTRL = 0xA98559DAU;
/*用户代码开始(40)*/*
用户代码结束*/
}/*
用户代码开始(41)*/
/*用户代码结束*/
*用户代码开始(42)*/
/*用户代码结束*/
*用户代码开始(43)*/
/*用户代码结束*/
//*用户代码开始(44) //
//*用户代码结束*/**
@fn void dwdSetPreload (uint16 dwPreload)
*@简要初始化 DWD 过期周期
*@param[in] dwdPreload DWD 预加载值,看门狗过期时间。
* - Texp =(dwdPreload +1)/RTICLK
* - n:除以 n + 1
*
*可以调用此函数来设置看门狗失效时间的预加载值。
*
*/
void dwdSetPreload (uint16 dwdPreload)
{
//用户代码开始(45)*/
//*用户代码结束*/
rtiREG1->DWDPRLD = dwPreload;
//*用户代码开始(46)*//
//*用户代码结束*/}//*
用户代码开始(47)*/
//*用户代码结束*//
//**@fn void dwdReset (void)
*@简短复位数字看门狗
*
*可以调用此函数来复位数字看门狗。
*
*/
void dwreset (void)
{
//用户代码开始(48)*/
*用户代码结束*/
rtiREG1->WDKEY = 0x0000E51AU;
rtiREG1->WDKEY = 0x0000A35CU;
//*用户代码开始(49)*//
*用户代码结束*/
@fn void dwdGenerateSysReset (void)
*@简要通过 DWD 生成系统复位
*
*可以调用此函数来使用 DWD 生成系统复位。
*
*/
void dwdGenerateSysReset (void)
{
//用户代码开始(50)*/
*用户代码结束*/
rtiREG1->WDKEY = 0x0000E51AU;
rtiREG1->WDKEY = 0x00002345U;
/*用户代码开始(51)*/*
/*用户代码结束*/}/*
用户代码开始(52)*/
//*用户代码结束*/
/**@fn 布尔型 IsdwKeySequenceCorrect(void)
*@简短检查 DWD 密钥序列是否正确。
*@return 函数将返回:
* - TRUE:正确写入 DWD 密钥序列。
* - false:DWD 密钥序列写入错误/未写入。
*
*此函数将获取 DWD 密钥序列的状态。
*
//
IsdwKeySequenceCorrect (void)
{布尔
状态;
//用户代码开始(53)*/
//*用户代码结束*/
if ((rtiREG1->WDSTATUS & 0x4U)== 0x4U)
{
状态= false;
}
否则
{
状态= true;
}
//用户代码开始(54)*/
*用户
代码返回状态
*
/*用户代码开始(55)*/
*用户代码结束*/
/**@fn dwResetStatus_t dwdGetStatus (void)
*@简短检查是否由于 DWD 而生成复位。
*@return 函数将返回:
* - Reset_generated:当由于 DWD 而生成复位时。
* - No_Reset_Generated:由于 DWD、不会生成复位。
*
*此函数将获得 DWD 复位状态。
*
//
dwdResetStatus_t dwdGetStatus (void)
{
/*用户代码开始(56)*/
/*用户代码结束*/
dwdResetStatus_t Reset_Status;
if ((rtiREG1->WDSTATUS & 0x2U)= 0x2U)
{
Reset_Status = Reset_Generated;
}
{* elet_Reset_Status_t Reset_Status
=
**
/ USER returned*/ END/ END/ END*
/*用户代码开始(58)*/*
用户代码结束*/**
@fn void dwClearFlag (void)
*@简要清除 DWD 违反标志。
*
*此函数将清除 DWD 状态寄存器。
*
*/
void dwClearFlag (void)
{
//*用户代码开始(59)*/
//*用户代码结束*/
rtiREG1->WDSTATUS = 0xFFU;
//*用户代码开始(60)*//
//*用户代码结束*/
*用户代码开始(61)*/
//*用户代码结束*//
//**@fn dwdViolation_t dwdGetViolationStatus (void)
*@简要检查 DWD 或 DWWD 违反的状态。
*@返回函数将返回发生的以下违规之一:
* - notime_violation
* - Key_Seq_violation
* - TIME_WINDOW_violation
* - EndTime_Window_Violation
* - StartTime_Window_Violation
*
*此函数将获取 DWD 或 DWWD 违反状态的状态。
*
//
dwdViolation_t dwdGetViolationStatus (void)
{
//*用户代码开始(62)*//
//*用户代码结束*
dwdViolation_t violation_t Status;
if ((rtiREG1->WDSTATUS & 0x04U)= 0x04U)
{
violation_Status = Key_Seq_violation;
}
= 0x8U_Violation;}
= 0x8U_WSTATUS & 0x8Ur (0x8U_StartU_Violation)= 0x8U_Violation (x8U_Violation)= 0x8U_Rex8U_StartU_
否则、如果((rtiREG1->WDSTATUS & 0x10U)= 0x10U)
{
violation_Status = EndTime_Window_violation;
}
否则、如果((rtiREG1->WDSTATUS & 0x20U)= 0x20U)
{
violation_Status = TIME_WINDOW_violation;
}
否则
为{
violation_Status = notime_Status = notime_违反***/
用户
代码* 63 */违反*****;违反**/用户*
/* USER CODE BEGIN (64)*/
/* USER CODE END */
/@fn void rtiEnableNotification (UINT32通知)
*@简短启用 RTI 模块通知
*@param[in]通知选择 RTI 模块通知
:* - rtiNOTIFICATION_COMPARE0:RTI 比较0通知
* - rtiNOTIFICATION_COMPARE1:RTI 比较1通知
* - rtiNOTIFICATION_COMPARE2:RTI 比较2通知
* - rtiNOTIFICATION_COMPARE3:RTI 比较3通知
* - rtiNOTIFICATION_TIMEbase:RTI 时基通知
* - rtiNOTIFICATION_COUNTER0:RTI 计数器0溢出通知
* - rtiNOTIFICATION_COUNTER1:RTI 计数器1溢出通知
*
*此函数将启用所选的 RTI 模块通知。
*可以启用多个屏蔽的通知。
//
////*用户代码开始(65)*//
//*用户代码结束*/
void rtiEnableNotification (UINT32 notification)
{//
用户代码开始(66)*//
*/*用户代码结束*/
rtiREG1->INTFLAG =通知;
rtiREG1->SETINTENA =通知;
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。
//
//*用户代码开始(67)*//
//*用户代码结束*/}//*
用户代码开始(68)*/
*用户代码结束*//
//**@fn void rtiDisableNotification (UINT32 notification)
*@RTI 模块的短暂禁用通知
*@param[in] notification 选择 RTI 模块通知
:* - rtiNOTIFICATION_COMPARE0:RTI 比较0通知
* - rtiNOTIFICATION_COMPARE1:RTI 比较1通知
* - rtiNOTIFICATION_COMPARE2:RTI 比较2通知
* - rtiNOTIFICATION_COMPARE3:RTI 比较3通知
* - rtiNOTIFICATION_TIMEbase:RTI 时基通知
* - rtiNOTIFICATION_COUNTER0:RTI 计数器0溢出通知
* - rtiNOTIFICATION_COUNTER1:RTI 计数器1溢出通知
*
*此函数将禁用所选的 RTI 模块通知。
*可以禁用多个屏蔽的通知。
//
////*用户代码开始(69)*//
//*用户代码结束*/
void rtiDisableNotification (UINT32 notification)
{//
用户代码开始(70)*//
*/*用户代码结束*/
rtiREG1->CLEARINTENA =通知;
/**@请注意,必须先调用函数 rtiInit,然后才能使用此函数。\n
* 此函数必须在特权模式下执行。
@/*用户代码开始(71)*/*用户代码结束*/}*/*用户代码开始(72)*/*用户代码结束*/**@fn void rtiGetConfigValue (RTI_CONFIG_REG_t * CONFIG_REG、CONFIG_VALUE_TYPE_t TYPE)*@简要获取配置寄存器的初始值或当前值*在*param_reg[*中:* parconfig_reg] 指向需要存储配置寄存器初始值或当前值的结构的指针
*@param[in]类型:需要存储配置寄存器的初始值还是当前值
*- InitialValue: 配置寄存器的初始值将存储在 CONFIG_reg 指向的结构中
*- CurrentValue:配置寄存器的初始值将存储在 CONFIG_reg 指向的结构中
*
此函数将复制初始值或当前值(取决于参数'type') 配置*
寄存器到 CONFIG_reg 指向的结构
*
/
void rtiGetConfigValue (RTI_CONFIG_REG_t * CONFIG_REG、CONFIG_VALUE_TYPE_t TYPE)
{
if (type = InitialValue)
{
CONFIG_REG_CONFIG_CONFIG_CONFIG_CONFIG_TRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRIG_UTRL_CONFIGTRL_CONFIGTRL_CONFIGTRL_CONFIGTRIGTRL_CONFIGTRIGTRL_CONFIGTRIGTRIGTRL_CONFIGTRL_CONFIGTRIGTRIGTRL_CONFIGTRIGTRIGTRL_CONFIGTRIGTRIGTRIGTRL_CONFIGTRIGTRIGTRL_CONFIGTRIGTRIGTRIGTRIGTRIGTRL_CONFIGTRIGTRL_CONFIG
CONFIG_REG->CONFIG_UDCP1 = RTI_UDCP1_CONFIGVALUE;
CONFIG->CONFIG_UDCP2 = RTI_UDCP2_CONFIGVALUE;
CONFIG->CONFIGCP3 = RTI_UDCP3_CONFIGVALUE;
}
否则
{
/SAFMCYS*134:MR "寄存器读回支持"*/
CONFIG_REG->CONFIG_GCTRL = rtiREG1->GCTRL;
CONFIG_REG1->CONFIG_TBCTRL = rtiREG1->TBCTRL;
CONFIG_REG1->CAPCTRL;
CONFIG_REG1->CONFIG_COMPCTRL = rtiREG1->CONFIG_UDCP0UDREG1->CONFIG_REG1->CONFIG_UDCPTRL;CONFIG_REG1->CONFIG_REUDREUDREG1->COMMUDREG1->COMMUDCLP0
CONFIG_REG->CONFIG_UDCP1 = rtiREG1->CMP[1U].UDCPx;
CONFIG_REG->CONFIG_UDCP2 = rtiREG1->CMP[2U].UDCPx;
CONFIG_REG3->CONFIG_UDCP3 = rtiREG1->CMP[3U].UDCPx;
}
}
//*用户代码开始(76)*//
*用户代码结束*//
@fn void rtiCompare1 Interrupt (void)
*@简短的 RTI1比较1中断处理程序
*
* RTI1比较1中断处理程序
*
//
#pragma CODE_STATE (rtiCompare0Interrupt、32)
#tiComparema INTERRUPT (rtiCompare0Interrupt、IRQ
)
rtiREG1->INTFLAG = 1U;
rtiNotification (rtiNOTIFICATION_COMPARE0);
}
#pragma CODE_STATE (rtiCompare1 Interrupt、32)
#pragma INTERRUPT (rtiCompare1 Interrupt、IRQ)
void rtiCompare1 Interrupt (void)
{
//用户代码开始(77)*
//*/*用户代码结束*
rtiREG1->INTFLAG = 2U;
rtiNotification (rtiNOTIFICATION_COMPARE1);
//用户代码开始(78)*//
*//*用户代码结束*
/}
void rtiCompare2中断(void)
{
//用户代码开始(77)*//
*用户代码结束*/
rtiREG1->INTFLAG = 4U;
rtiNotification (rtiNOTIFICATION_COMPARE2);
//用户代码开始(78)*//
*//*用户代码结束*
/}
void rtiCompare3中断(void)
{
//用户代码开始(77)*//
*用户代码结束*/
rtiREG1->INTFLAG = 8U;
rtiNotification (RtiNOTIFICATION_COMPARE3);
/*用户代码开始(78)*/*
用户代码结束*/
}/../../---------------
EKLENENEN KOD------------------------------------------------------- 5.3.2020 //
///*
#pragma CODE_STATE (rtiCompare0Interrupt、32)
#pragma INTERRUPT (rtiCompare0Interrupt、IRQ)
void rtiCompare0Interrupt (void)
{
rtiREG1->INTFLAG = 1U;
rtiNotification (rtiNOTIFICATION_COMPARE0);
}
*/
/*
RTI_deneme.c
*
*创建日期:2020年3月5日
* 作者:ycarata1
*/
#include "sys_common.h"
#include "system.h"
#include
#include
#include
#include
include "gio.h"
#include "sci.h"
#include "rti.h"
#include "sys_vim.h"
#include "swi_util.h"
#include "pl455.h"
#include "stdlib.h"
int UART_RX_RDY = 0;
int RTI_TIMEOUT = 0;
void (void)
{void}{void main}
rtiInit();// yapmayınca ilk tur da voltajlar 0 okunyor。
vimInit();
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);
rtiEnableNotification (rtiNOTIFICATION_COMPARE1);
rtiEnableNotification (rtiNOTIFICATION_COMPARE2);
rtiEnableNotification (rtiNOTIFICATION_COMPARE3);
_enable_IRQ ();// silence çalışmıyor
esmInit();
rtiStartCounter (rtiCOUNTER_BLOCK0);
while (1)
{};
}
void rtiNotification (无符号通知)
{
if (notification == rtiNOTIFICATION_COMPARE0)
{
printf ("Merhaba \r\n");
}
否则、如果(notification == rtiNOTIFICATION_COMPARE1)
{
printf ("Selam \r\n");
}
否则、如果(notification == rtiNOTIFICATION_COMPARE2)
{
printf ("2 \r\n");
}
否则、如果(notification == rtiNOTIFICATION_COMPARE3)
{
printf ("3 \r\n");
}
}
void esmGroup1Notification (无符号通道)
{
return;
}
void esmGroup2Notification (无符号通道)
{
返回;
}
结果为:
总是这样。
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
Selam
该主题有什么问题?