按照表23-9的方式进行配置,禁用引脚pin[n]的input buffer。在N2HET运行时,使用PCNT指令依旧能够在pin[n]正常捕获实际运行电平宽度。
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.
按照表23-9的方式进行配置,禁用引脚pin[n]的input buffer。在N2HET运行时,使用PCNT指令依旧能够在pin[n]正常捕获实际运行电平宽度。
//het指令程序源码
B0 CNT { next=B1,reg=A,max=4,data=0};
B1 ECMP { next=B2,hr_lr=LOW,en_pin_action=ON,cond_addr=B2,pin=10,action=PULSEHI,reg=A,data=1,hr_data=0x00};
B2 PCNT { hr_lr=LOW,next=B0,type=RISE2FALL,pin=1,control=ON,prv=OFF,data=0};
*****************************************************************************
//C语言代码
//het指令对应的结构体
static const hetINSTRUCTION_t HET_INIT0_PST[3] =
{
/* B0_0 */
{
0x00002C20,
0x00000004,
0x00000000,
0x00000000
},
/* B1_0 */
{
0x00004100,
0x00404A18,
0x00000080,
0x00000000
},
/* B2_0 */
{
0x00000E61,
0x04000000,
0x00000000,
0x00000000
}
};
static const hetINSTRUCTION_t HET_INIT2_PST[2] =
{
/* B0_0 */
{
0x00002C20,
0x00000001,
0x00000000,
0x00000000
},
/* B1_0 */
{
0x00000100,
0x00400018,
0x000000DA,
0x00000000
}
};
//het初始化函数
/** @fn void hetInit(void)
* @brief Initializes the het Driver
*
* This function initializes the het 1 module.
*/
/* SourceId : HET_SourceId_001 */
/* DesignId : HET_DesignId_001 */
/* Requirements : HL_CONQ_HET_SR10 */
void hetInit(void)
{
int i = 0x10000;
/** @b initialize @b HET */
/** - Set HET pins default output value */
hetREG1->DOUT = (uint32)((uint32)0U << 31U)
| (uint32)((uint32)0U << 30U)
| (uint32)((uint32)0U << 29U)
| (uint32)((uint32)0U << 28U)
| (uint32)((uint32)0U << 27U)
| (uint32)((uint32)0U << 26U)
| (uint32)((uint32)0U << 25U)
| (uint32)((uint32)0U << 24U)
| (uint32)((uint32)0U << 23U)
| (uint32)((uint32)0U << 22U)
| (uint32)((uint32)0U << 21U)
| (uint32)((uint32)0U << 20U)
| (uint32)((uint32)0U << 19U)
| (uint32)((uint32)0U << 18U)
| (uint32)((uint32)0U << 17U)
| (uint32)((uint32)0U << 16U)
| (uint32)((uint32)0U << 15U)
| (uint32)((uint32)0U << 14U)
| (uint32)((uint32)0U << 13U)
| (uint32)((uint32)0U << 12U)
| (uint32)((uint32)0U << 11U)
| (uint32)((uint32)0U << 10U)
| (uint32)((uint32)0U << 9U)
| (uint32)((uint32)0U << 8U)
| (uint32)((uint32)0U << 7U)
| (uint32)((uint32)0U << 6U)
| (uint32)((uint32)0U << 5U)
| (uint32)((uint32)0U << 4U)
| (uint32)((uint32)0U << 3U)
| (uint32)((uint32)0U << 2U)
| (uint32)((uint32)0U << 1U)
| (uint32)((uint32)0U << 0U);
/** - Set HET pins direction */
hetREG1->DIR = (uint32) 0x00000000U
| (uint32) 0x00000000U
// | (uint32) 0x00000004U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000c00U
// | (uint32) 0x00000400U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/** - Set HET pins open drain enable */
hetREG1->PDR = (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/** - Set HET pins pullup/down enable */
hetREG1->PULDIS = (uint32) 0x00000000U
| (uint32) 0x00000002U
// | (uint32) 0x02000000U
// | (uint32) 0x00040000U
// | (uint32) 0x00800000U
// | (uint32) 0x00080000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/** - Set HET pins pullup/down select */
hetREG1->PSL = (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/** - Set HET pins high resolution share */
hetREG1->HRSH = 0;
#if 0
(uint32) 0x00008000U
| (uint32) 0x00004000U
| (uint32) 0x00002000U
| (uint32) 0x00001000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000008U
| (uint32) 0x00000004U
// | (uint32) 0x00000002U
| (uint32) 0x00000001U;
#endif
/** - Set HET pins AND share */
hetREG1->AND = (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
// | (uint32) 0x00000020U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
// | (uint32) 0x00000002U
| (uint32) 0x00000000U;
/** - Set HET pins XOR share */
hetREG1->XOR = (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
// | (uint32) 0x00000020U
// | (uint32) 0x00000022U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/* USER CODE BEGIN (1) */
#if 0
//loopback,pin10-11
hetREG1->LBPSEL = (0x20U<<0U) //LBPSEL,1-enable loopback
| (0x20U<<16U); //LBPTYPE,0-digital,1-analog
hetREG1->LBPDIR = (0xA<<16) //LBP Test enable key
| (0x20<<0U); //0:1->0,1:0->1
#endif
#if 0
//loopback,pin0-1
hetREG1->LBPSEL = (0x1U<<0U) //LBPSEL,1-enable loopback
| (0x1U<<16U); //LBPTYPE,0-digital,1-analog
hetREG1->LBPDIR = (0xA<<16) //LBP Test enable key
| (0x0<<0U); //0:1->0,1:0->1
#endif
// het_loopback_enable(hetREG1,10,1);
/* USER CODE END */
/** - Setup prescaler values
* - Loop resolution prescaler
* - High resolution prescaler
*/
hetREG1->PFR = (uint32)((uint32) 3U << 8U)
| ((uint32)0U);
/** - Parity control register
* - Enable/Disable Parity check
*/
//hetREG1->PCR = (uint32) 0x00000005U;
hetREG1->PCR = (uint32) 0x0000010AU;
/** - Fill HET RAM with opcodes and Data */
/*SAFETYMCUSW 94 S MR:11.1,11.2,11.4 <APPROVED> "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */
/*SAFETYMCUSW 95 S MR:11.1,11.4 <APPROVED> "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */
/*SAFETYMCUSW 95 S MR:11.1,11.4 <APPROVED> "HET RAM Fill from the table - Allowed as per MISRA rule 11.2" */
// (void)memcpy((void *)hetRAM1, (const void *)het1PROGRAM, sizeof(het1PROGRAM));
//SSYU
(void)memcpy((void *)hetRAM1, (const void *)HET_INIT0_PST, sizeof(HET_INIT0_PST));
/** - Setup interrupt priority level
* - PWM 0 end of duty level
* - PWM 0 end of period level
* - PWM 1 end of duty level
* - PWM 1 end of period level
* - PWM 2 end of duty level
* - PWM 2 end of period level
* - PWM 3 end of duty level
* - PWM 3 end of period level
* - PWM 4 end of duty level
* - PWM 4 end of period level
* - PWM 5 end of duty level
* - PWM 5 end of period level
* - PWM 6 end of duty level
* - PWM 6 end of period level
* - PWM 7 end of duty level
* - PWM 7 end of period level
* - CCU Edge Detection 0 level
* - CCU Edge Detection 1 level
* - CCU Edge Detection 2 level
* - CCU Edge Detection 3 level
* - CCU Edge Detection 4 level
* - CCU Edge Detection 5 level
* - CCU Edge Detection 6 level
* - CCU Edge Detection 7 level
*/
hetREG1->PRY = (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
/** - Enable interrupts
* - PWM 0 end of duty
* - PWM 0 end of period
* - PWM 1 end of duty
* - PWM 1 end of period
* - PWM 2 end of duty
* - PWM 2 end of period
* - PWM 3 end of duty
* - PWM 3 end of period
* - PWM 4 end of duty
* - PWM 4 end of period
* - PWM 5 end of duty
* - PWM 5 end of period
* - PWM 6 end of duty
* - PWM 6 end of period
* - PWM 7 end of duty
* - PWM 7 end of period
* - CCU Edge Detection 0
* - CCU Edge Detection 1
* - CCU Edge Detection 2
* - CCU Edge Detection 3
* - CCU Edge Detection 4
* - CCU Edge Detection 5
* - CCU Edge Detection 6
* - CCU Edge Detection 7
*/
hetREG1->INTENAC = 0xFFFFFFFFU;
hetREG1->INTENAS = (uint32) 0x00000001U
| (uint32) 0x00000002U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000010U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000080U
| (uint32) 0x00000100U
| (uint32) 0x00000000U
| (uint32) 0x00000400U
| (uint32) 0x00000800U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U
| (uint32) 0x00000000U;
hetREG1->EXC1 = 1<<8;//Program Overflow Enable
/** - Setup control register
* - Enable output buffers
* - Ignore software breakpoints
* - Master or Slave Clock Mode
* - Enable HET
*/
hetREG1->GCR = ( 0x00000001U
| (uint32)((uint32)0U << 24U)
| (uint32)((uint32)1U << 16U) //1master or 0slave
| (0x00000000U));//0x00020000U
}你好,抱歉回复晚了。
参考下下面这篇帖子:
上帖中说没有仿真器,输入缓冲区会禁用我们提到的上述配置,而使用仿真器,输入缓冲区不会禁用。
所以你那边是如何测试的?
带调试器或者没有带调试器?
如果带调试器,能否去掉调试器再试试?