注册会员
- 积分
- 152
- 威望
- 72
- 贡献
- 42
- 兑换币
- 41
- 注册时间
- 2016-4-14
- 在线时间
- 19 小时
- 毕业学校
- 昆明理工大学
|
小弟是菜鸟,头一次玩超声波测距仪。按照这个技术要求进行了编程,先产生了一个1Hz的方波,理应满足了10us以上的脉冲,示波器也读的到波形。这个时候理应ECHO向一个设为输入的IO口发一个高电平,但是我读取这个引脚上的电平状态,却一直是0,想了很长时间没有想明白,我把程序贴出来,还请大家帮我看看什么地方出了问题。
static void PIT_ISR(void)
{
/*翻转电平/
GPIO_ToggleBit(HW_GPIOC, 4);
}
int main(void)
{
//PTC4发脉冲,配置为输出引脚
SIM->SCGC5 |= SIM_SCGC5_PORTC_MASK;
PORTC->PCR[4] |= PORT_PCR_MUX(1);
PTC->PDOR |= GPIO_PDOR_PDO(0); //复位引脚
PORTC->PCR[4] |= PORT_PCR_IRQC_MASK; //中断使能
//-OPP模式
PORTC->PCR[4] &= ~PORT_PCR_PE_MASK; // 禁止PTC上下拉电阻功能
PORTC->PCR[4] &= ~PORT_PCR_ODE_MASK; // 禁用开漏输出
PTC->PDDR |= GPIO_PDDR_PDD_MASK; // 数据方向为输出
//PTD4收脉冲,输入引脚
SIM->SCGC5 |= SIM_SCGC5_PORTD_MASK;
PORTD->PCR[4] |= PORT_PCR_MUX(1);
PTD->PDOR |= GPIO_PDOR_PDO(0); //复位引脚
PORTD->PCR[4] |= PORT_PCR_IRQC_MASK; //中断使能
PORTD->PCR[4] |= PORT_PCR_IRQC(1011); // PORTD跳变沿产生中断
//IPD模式
PORTD->PCR[4] |= PORT_PCR_PE_MASK; //开启PTD上下拉电阻功能
PORTD->PCR[4] &= ~PORT_PCR_PS_MASK; // 开启下拉电阻
PORTD->PCR[4] &= ~PORT_PCR_ODE_MASK; // 禁用开漏输出
PTD->PDDR &= ~GPIO_PDDR_PDD_MASK; // 数据方向为输入
/* 初始化PIT */
PIT_InitTypeDef PIT_InitStruct1;
PIT_InitStruct1.chl = HW_PIT_CH0;
PIT_InitStruct1.timeInUs = 1000*1000; /* 定式周期1s */
PIT_Init(&PIT_InitStruct1);
/* 注册中断回调函数*/
PIT_CallbackInstall(HW_PIT_CH0, PIT_ISR); //0号定时器的中断处理
/* 开启PIT0的定时器中断 */
PIT_ITDMAConfig(HW_PIT_CH0, kPIT_IT_TOF, true);
while(1)
{
uint8_t status ;
status = GPIO_ReadBit(HW_GPIOD, 4); //读取PTD4输入引脚上的电平状态
while(!status == 1); //等待高电平并开始计时
}
} |
|
|