📄 csb.c
字号:
#include "CSB.h"
#include "LPC213x.h"
#include "SPI/SPI.h"
uint32 m_length=0;
uint32 temp0=0,temp1=0;
void Timer1_CapInt(void) __irq
{
T0IR = 1 << 4;
temp1=T0CR0;
// EXTINT = 0x08;
VICVectAddr = 0x00;
// VICIntEnClr=1<<17;
Length_CAL();
}
void ENTinit(void)
{
/*PINSEL1 |=1<<29; //P0.30 EINT3
EXTMODE=0x08; //跳沿触发
EXTPOLAR=0x08; //上跳沿触发
VICIntSelect = 0x00000000; //设置所有中断分配为IRQ中断
VICVectCntl0 = 0x20 | 17; //分配外部中断3到向量中断0
VICVectAddr0 = (unsigned int)Eint3_IRQ;// 设置中断服务程序地址
EXTINT = 0x08; //清除EINT0中断标志
*/
PINSEL1 |=11<<28;
VICIntSelect = 0x00000000; // 设置所有的通道为IRQ中断
VICVectCntl0 = 0x20 | 4; // Timer1分配到IRQ slot0,即最高优先级
VICVectAddr0 = (uint32)Timer1_CapInt; // 设置Timer1向量地址
VICIntEnable = 1 << 4; // 使能Timer1中断
}
void Time1init(void) {
/*T1TC=0; //定时器设置为0 ,16位定时器
T1PR = 99999; // 设置定时器分频为10000分频,得600000
T1MCR = 0x03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
T1MR0 = 6000/2; // 设置0.5s匹配值
*/
T0PR = 9; // 分频系数
T0CCR = (1 << 1)| // 设置CAP1.2下降沿捕获
(1 << 2); // 允许产生中断
}
/**********************************
********
***利用GPIO功能输出四个脉冲
*******
*********************************/
void CSB_init(void)
{
Time1init();
IO0DIR |=1<<21 ;
ENTinit();
}
void Length_CAL(void)
{
m_length=((temp1)*340)/3000;
m_length=m_length;
}
void TimeDelay()
{
int i;
for(i=100;i>0;i--) ; ///25KHZ
}
void CSB_PWM_OUT()
{
IO0SET |=1<<21;
TimeDelay();
IO0CLR |=1<<21;
TimeDelay();
IO0SET |=1<<21;
TimeDelay();
IO0CLR |=1<<21;
TimeDelay();
IO0SET |=1<<21;
TimeDelay();
IO0CLR |=1<<21;
TimeDelay();
IO0SET |=1<<21;
TimeDelay();
IO0CLR |=1<<21;
TimeDelay();
}
void CSB_START(void)
{
T0TC=0;
CSB_PWM_OUT(); //启动超声波
//VICIntEnable=1<<17; //使能外部中断
VICIntEnable = 1 << 4; // 使能Timer1中断
T0TCR = 0x2; // 启动并复位T0TC
T0TCR=0x01;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -