📄 main.c
字号:
/*AT91C_AIC_SVR[AT91C_ID_FIQ] = (uint32)irq_fiq; //快速中断 0
AT91C_AIC_SVR[AT91C_ID_SYS] = (uint32)irq_SYS;
AT91C_AIC_SVR[AT91C_ID_PIOA] = (uint32)irq_pioa; //并行I/O控制器A 2
AT91C_AIC_SVR[AT91C_ID_3_Reserved] = (uint32)irq_Reserved;
AT91C_AIC_SVR[AT91C_ID_ADC] = (uint32)irq_adc; //模数转换器 4
AT91C_AIC_SVR[AT91C_ID_SPI] = (uint32)irq_spi; //串行外设接口 5
AT91C_AIC_SVR[AT91C_ID_US0] = (uint32)irq_us0; //USART 0 6
AT91C_AIC_SVR[AT91C_ID_US1] = (uint32)irq_us1; //USART 1 7
AT91C_AIC_SVR[AT91C_ID_SSC] = (uint32)irq_ssc; //同步串行接口 8
AT91C_AIC_SVR[AT91C_ID_TWI] = (uint32)irq_twi; //两线接口 9
AT91C_AIC_SVR[AT91C_ID_PWMC] = (uint32)irq_pwmc; //PWM 控制器 10
AT91C_AIC_SVR[AT91C_ID_UDP] = (uint32)irq_udp; //USB设备端口 11
AT91C_AIC_SVR[AT91C_ID_TC0] = (uint32)irq_Tc0; //定时器0中断 12
AT91C_AIC_SVR[AT91C_ID_TC1] = (uint32)irq_Tc1; //定时器1中断 13
AT91C_AIC_SVR[AT91C_ID_TC2] = (uint32)irq_Tc2; //定时器2中断 14
AT91C_AIC_SVR[AT91C_ID_15_Reserved] = (uint32)irq_15_Reserved;
AT91C_AIC_SVR[AT91C_ID_16_Reserved] = (uint32)irq_16_Reserved;
AT91C_AIC_SVR[AT91C_ID_17_Reserved] = (uint32)irq_17_Reserved;
AT91C_AIC_SVR[AT91C_ID_18_Reserved] = (uint32)irq_18_Reserved;
AT91C_AIC_SVR[AT91C_ID_19_Reserved] = (uint32)irq_19_Reserved;
AT91C_AIC_SVR[AT91C_ID_20_Reserved] = (uint32)irq_20_Reserved;
AT91C_AIC_SVR[AT91C_ID_21_Reserved] = (uint32)irq_21_Reserved;
AT91C_AIC_SVR[AT91C_ID_22_Reserved] = (uint32)irq_22_Reserved;
AT91C_AIC_SVR[AT91C_ID_23_Reserved] = (uint32)irq_23_Reserved;
AT91C_AIC_SVR[AT91C_ID_24_Reserved] = (uint32)irq_24_Reserved;
AT91C_AIC_SVR[AT91C_ID_25_Reserved] = (uint32)irq_25_Reserved;
AT91C_AIC_SVR[AT91C_ID_26_Reserved] = (uint32)irq_26_Reserved;
AT91C_AIC_SVR[AT91C_ID_27_Reserved] = (uint32)irq_27_Reserved;
AT91C_AIC_SVR[AT91C_ID_28_Reserved] = (uint32)irq_28_Reserved;
AT91C_AIC_SVR[AT91C_ID_29_Reserved] = (uint32)irq_29_Reserved;
AT91C_AIC_SVR[AT91C_ID_IRQ0] = (uint32)irq_IRQ0;
AT91C_AIC_SVR[AT91C_ID_IRQ1] = (uint32)irq_IRQ1;
*/
}
//io设置
void hsiosz(void)
{
PIO_PER = 0xffffffff; //使能寄存器,0 = 无效,1 = 使能(禁用引脚外设控制)。只写
//PIO_PDR = 0xffffffff; //禁用寄存器,0 = 无效,1 = 禁用(使能引脚外设控制)。只写
PIO_OER = 0x7; //输出使能寄存器,0 = 无效,1 = 使能I/O 线上输出。只写
PIO_ODR = 0xfffffff8; //输出禁用寄存器,0 = 无效,1 = 禁用I/O 线上输出。只写
//PIO_OSR PIO 输出状态寄存器,0 = I/O 线为纯输入,1 = I/O 线输出使能。只读
//PIO_IFER PIO 输入滤波器使能寄存器,0 = 无效,1 = 使能。只写
//PIO_IFDR PIO 输入滤波器禁用寄存器,0 = 无效,1 = 禁用。只写
//PIO_IFSR PIO 输入滤波器状态寄存器,0 = 滤波器禁用,1 = 滤波器使能。只读
//PIO_SODR PIO 置位输出数据寄存器,0 = 无效,1 = 设置在I/O 线上驱动的数据。只写
//PIO_CODR PIO 输出数据清零寄存器,0 = 无效,1 = 清除在I/O 线上驱动的数据。只写
//PIO_ODSR PIO 输出数据状态寄存器,0 = 驱动到I/O线上的数据为0,1 = 驱动到I/O线上的数据为1。只读或读/写
//PIO_PDSR PIO 引脚数据状态寄存器,0 = I/O线上的数据为0,1 = I/O线上的数据为1。只读
//PIO_IER = 0; //PIO 中断使能寄存器,0 = 无效,1 = 使能I/O 线上输入变化中断。只写
PIO_IDR = 0xffffffff;//中断禁用寄存器,0 = 无效,1 = 禁用I/O 线上输入变化中断。只写
//PIO_IMR PIO 中断屏蔽寄存器,0 = I/O 线上输入变化中断禁用,1 = I/O 线上输入变化中断使能。只读
//PIO_ISR PIO 中断状态寄存器,0 = 上次PIO_ISR读后或复位后, I/O 线上未检测到输入变化,1 = 上次PIO_ISR读后或复位后, I/O 线上至少检测到一次输入变化。只读
PIO_MDER = 0xffffffff; //多驱动使能寄存器,0 = 无效,1 = 使能(使能引脚外设控制)。只写
//PIO_MDDR PIO 多驱动禁用寄存器,0 = 无效,1 = 禁用(使能引脚外设控制)。只写
//PIO_MDSR PIO 多驱动状态寄存器,0 = 禁用,引脚驱动为高低电平,1 = 使能,引脚仅驱动为低电平。只读
//PIO_PUDR PIO 上拉禁用寄存器,0 = 无效,1 = 禁用I/O 线上拉电阻。只写
PIO_PPUER = 0xffffffff; //上拉使能寄存器,0 = 无效,1 = 使能I/O 线上拉电阻。只写
//PIO_PUSR PIO 多驱动状态寄存器,0 = I/O 线上拉电阻使能,1 = I/O 线上拉电阻禁用。只读
//PIO_ASR PIO 外设A 选择寄存器,0 = 无效,1 = I/O 线分配给外设A。只写
//PIO_BSR PIO 外设B 选择寄存器,0 = 无效,1 = I/O 线分配给外设B。只写
//PIO_ABSR PIO 外设A B 状态寄存器,0 = I/O 线分配给外设A,1 = I/O 线分配给外设B。只读
PIO_OWER = 0xffffffff; //输出写使能寄存器,0 = 无效,1 = 使能I/O 线对PIO_ODSR 写。只写
//PIO_OWDR PIO 输出写禁用寄存器,0 = 无效,1 = 禁用I/O 线对PIO_ODSR 写。只写
//PIO_OWSR PIO 输出写状态寄存器,0 = 写PIO_ODSR 不影响I/O 线,1 = 写PIO_ODSR 影响I/O 线。只读
}
//判断定时器
void hspdtc0()
{
AIC_IDCR |= set_12; //AIC中断禁用命令寄存器
if(uz_zd1msyd != 0)
{
uz_zd1msyd = 0;
AIC_IECR |= set_12; //AIC中断使能命令寄存器
uz_1msyd = 1;
}
AIC_IECR |= set_12; //AIC中断使能命令寄存器
}
//清定时器
void hsqdsq()
{
uz_1msyd = 0;
uz_10msyd = 0;
uz_100msyd = 0;
uz_1syd = 0;
}
/*
uz_1msyd,1ms已到
uz_cs10ms,10ms分频
uz_cs100ms,100ms分频
uz_cs1s,1s分频
*uz_10ms,10MS地址
*uz_100ms,100MS地址
*uz_1s,1S地址
*uz_10msyd,10MS地址已到
*uz_100msyd,100MS地址已到
*uz_1syd,1S地址已到
*/
void ws_hspddsq(unsigned char uz_1msyd,unsigned char uz_cs10ms,unsigned char uz_cs100ms,unsigned char uz_c1s,
unsigned char *uz_10ms,unsigned char *uz_100ms,unsigned char *uz_1s,
unsigned char *uz_10msyd,unsigned char *uz_100msyd,unsigned char *uz_1syd)
{
if(uz_1msyd != 0)
{
if(*uz_10ms == 0)
{
*uz_10msyd = 1;
*uz_10ms = uz_cs10ms;
if(*uz_100ms == 0)
{
*uz_100msyd = 1;
*uz_100ms = uz_cs100ms;
if(*uz_1s == 0)
{
*uz_1syd = 1;
*uz_1s = uz_c1s;
}
else
{
--*uz_100ms;
}
}
else
{
--*uz_100ms;
}
}
else
{
--*uz_10ms;
}
}
}
/*
uz_qdcssj,去抖时间
uz_qdcs_cs,去抖次数
*uz_qdcs,去抖次数
*ul_dkdz,端口地址
*ul_zcs,暂存数
*ul_ccs,储存熟
*ul_srycz,输入已操作
*/
void ws_hs_dwbsr(unsigned char uz_qdcssj,unsigned char uz_qdcs_cs,unsigned char *uz_qdcs,
unsigned long *ul_zcs,unsigned long *ul_ccs,unsigned long *ul_srycz)
{
if(uz_qdcssj != 0) //去抖时间
{
if(*uz_qdcs == 0) //去抖次数
{
*uz_qdcs = uz_qdcs_cs;
*ul_ccs = *ul_zcs;
*ul_srycz |= *ul_ccs;
}
else
{
--*uz_qdcs; //去抖次数
if(PIO_PDSR != *ul_zcs)
{
*ul_zcs = PIO_PDSR;
*uz_qdcs = uz_qdcs_cs;
}
}
}
}
//输入处理
unsigned char a0;
unsigned char a1;
unsigned char a2;
unsigned char a3;
void ws_hssrcl(unsigned long *ul_ccs,unsigned long *ul_srycz)
{
if((uz_1msyd !=0 )&&(ul_bza !=0))
{
if(a0 == 0)
{
ul_sc |= set_0;
PIO_ODSR|= set_0;
a0 =1;
}
else
{
ul_sc &= clr_0;
PIO_ODSR&= clr_0;
a0 =0;
}
}
if((*ul_ccs&set_16)==0)
{
if((*ul_srycz&set_16)!=0)
{
*ul_srycz&=clr_16;
if(a0 == 0)
{
ul_sc |= set_0;
a0 =1;
}
else
{
ul_sc &= clr_0;
a0 =0;
}
}
}
if((*ul_ccs&set_15)==0)
{
ul_bza = 1;
if((*ul_srycz&set_15)!=0)
{
*ul_srycz&=clr_15;
if(a1 == 0)
{
ul_sc |= set_1;
a1 =1;
}
else
{
ul_sc &= clr_1;
a1 =0;
}
}
}
if((*ul_ccs&set_20)==0)
{
if((*ul_srycz&set_20)!=0)
{
*ul_srycz&=clr_20;
if(a2 == 0)
{
ul_sc |= set_2;
a2 =1;
}
else
{
ul_sc &= clr_2;
a2 =0;
}
}
}
if((*ul_ccs&set_23)==0)
{
if((*ul_srycz&set_23)!=0)
{
*ul_srycz&=clr_23;
if(a3 == 0)
{
ul_sc |= set_0;
ul_sc |= set_1;
ul_sc |= set_2;
a0 =1;
a1 =1;
a2 =1;
a3 =1;
}
else
{
ul_sc &= clr_0;
ul_sc &= clr_1;
ul_sc &= clr_2;
a0 =0;
a1 =0;
a2 =0;
a3 =0;
}
}
}
}
//输出
void ws_hssc(void)
{
// PIO_ODSR = ul_sc;
}
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -