📄 main.c
字号:
#include "AT91SAM7S64.H"
#include "dy.H"
/*
0 AIC 先进的中断控制器FIQ
1 SYSIRQ(1) 系统中断
2 PIOA 并行I/O控制器A
3 保留
4 ADC(1) 模数转换器
5 SPI 串行外设接口
6 US0 USART 0
7 US1 USART 1
8 SSC 同步串行接口
9 TWI 两线接口
10 PWMC PWM 控制器
11 UDP USB设备端口
12 TC0 定时器/计数器0
13 TC1 定时器/计数器1
14 TC2 定时器/计数器2
15 - 29 保留
30 AIC 先进的中断控制器IRQ0
31 AIC 先进的中断控制器IRQ1
*/
/******************************I/O*************************************/
//PIO_PER PIO 使能寄存器,0 = 无效,1 = 使能(禁用引脚外设控制)。只写
//PIO_PDR PIO 禁用寄存器,0 = 无效,1 = 禁用(使能引脚外设控制)。只写
//PIO_PSR PIO 状态寄存器,0 = 无效(外设激活),1 = 使能(外设无效)。只读
//PIO_OER PIO 输出使能寄存器,0 = 无效,1 = 使能I/O 线上输出。只写
//PIO_ODR PIO 输出禁用寄存器,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 PIO 中断使能寄存器,0 = 无效,1 = 使能I/O 线上输入变化中断。只写
//PIO_IDR PIO 中断禁用寄存器,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 PIO 多驱动使能寄存器,0 = 无效,1 = 使能(使能引脚外设控制)。只写
//PIO_MDDR PIO 多驱动禁用寄存器,0 = 无效,1 = 禁用(使能引脚外设控制)。只写
//PIO_MDSR PIO 多驱动状态寄存器,0 = 禁用,引脚驱动为高低电平,1 = 使能,引脚仅驱动为低电平。只读
//PIO_PUDR PIO 上拉禁用寄存器,0 = 无效,1 = 禁用I/O 线上拉电阻。只写
//PIO_PUER PIO 上拉使能寄存器,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 PIO 输出写使能寄存器,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 线。只读
/*****************************I/O*************************************/
/*****************************中断*************************************/
//AIC_SMR0 源模式寄存器0 读/ 写0x0
//AIC_SMR1 源模式寄存器1 读/ 写0x0
//AIC_SMR31 源模式寄存器31 读/ 写0x0,,---,0-2优先级,5-6中断源类型
//-----00 电平敏感 01 边沿触发10 电平敏感 11 边沿触发,内部中断源有效电平或边沿不可编程
//AIC_SVR0 源向量寄存器0 读/ 写0x0
//AIC_SVR1 源向量寄存器1 读/ 写0x0
//AIC_SVR31 源向量寄存器31 读/ 写0x0
//-----用户可在这些寄存器中存储各个中断源相关处理程序地址
//AIC_IVR 中断向量寄存器 只读0x0 --中断向量寄存器包含了用户编程的当前中断相关的源向量寄存器
//AIC_FVR 快速中断向量寄存器 只读0x0--FIQ向量寄存器包含用户在源向量寄存器0中编程的向量值
//AIC_ISR 中断状态寄存器只读0x0--中断状态寄存器返回当前中断源序号
//AIC_IPR 中断挂起寄存器只读0x0(1) --0 = 相关中断未挂起。1 = 相关中断挂起。
//AIC_IMR 中断屏蔽寄存器只读0x0 --0 = 相应中断禁用。1 = 相应中断使能。
//AIC_CISR 内核中断状态寄存器只读0x0 --0-0 0 = nFIQ 线无效。1 = nFIQ 线激活。1-1 0 = nIRQ 线无效。1 = nIRQ 线激活。
//AIC_IECR 中断使能命令寄存器只写–- 0 = 无效。1 = 使能相应中断。
//AIC_IDCR 中断禁用命令寄存器只写–- 0 = 无效。1 = 禁用相应中断。
//AIC_ICCR 中断清除命令寄存器只写–- 0 = 无效。1 = 清除相应中断。
//AIC_ISCR 中断置位命令寄存器只写–- 0 = 无效。1 = 置位相应中断
//AIC_EOICR 中断结束命令寄存器只写–-中断处理程序用中断结束命令寄存器指示中断处理结束。因为只需要向该寄存器地址写值以标识中断处理结束,所以可向其写入任意值。
//AIC_SPU 伪中断向量寄存器读/ 写0x0--用户可在该寄存器中存储伪中断处理程序的地址。当出现未中断时,写入该寄存器的值为AIC_IVR 的返回值,类似的发生伪快速中断时,写入该寄存器的值为AIC_IVR 的返回值。
//AIC_DCR 调试控制寄存器读/ 写0x0-- 0-0 0 = 保护模式禁用。1 = 保护模式使能。1-1 0 = nIRQ 与nFIQ 线由AIC 控制。1 = nIRQ 与nFIQ 线置于无效状态。
//AIC_FFER 快速强制使能寄存器只写–- 0 = 无效。1 = 使能相应中断快速强制特性
//AIC_FFDR 快速强制禁用寄存器只写–- 0 = 无效。1 = 禁用相应中断快速强制特性
//AIC_FFSR 快速强制状态寄存器只读0x0--0 = 禁用相应中断的快速强制特性。1 = 使能相应中断的快速强制特性。
/*****************************中断*************************************/
/*****************************tc*************************************/
//TC_BCR TC块控制寄存器 0 0 = 无效。1 = 出现SYNC 信号,给每个通道同时产生软件触发。
//TC_BMR TC块模式寄存器只写--
//TC_CCR TC通道控制寄存器 0 0 = 无效。1 = 若CLKDIS 不为1,使能时钟。1 0 = 无效。1 = 禁用时钟 2 0 = 无效。1 = 软件触发执行:计数器复位,时钟启动。
//TC_CMR 通道模式寄存器读/写0
//TC_CV 计数器值只读0
//TC_RA 寄存器A 读/写(1) 0
//TC_RB 寄存器B 读/写(1) 0
//TC_RC 寄存器C 读/写0
//TC_SR 状态寄存器只读0
//TC_IER 中断使能寄存器只写
//TC_IDR 中断禁用寄存器只写
//TC_IMR 中断屏蔽寄存器只读
/*****************************tc*************************************/
//清0和置1
#define set_0 0X1
#define clr_0 0XFFFFFFFE
#define set_1 0X2
#define clr_1 0XFFFFFFFD
#define set_2 0X4
#define clr_2 0XFFFFFFFB
#define set_3 0X8
#define clr_3 0XFFFFFFF7
#define set_4 0X10
#define clr_4 0XFFFFFFEF
#define set_5 0X20
#define clr_5 0XFFFFFFDF
#define set_6 0X40
#define clr_6 0XFFFFFFBF
#define set_7 0X80
#define clr_7 0XFFFFFF7F
#define set_8 0X100
#define clr_8 0XFFFFFEFF
#define set_9 0X200
#define clr_9 0XFFFFFDFF
#define set_10 0X400
#define clr_10 0XFFFFFBFF
#define set_11 0X800
#define clr_11 0XFFFFF7FF
#define set_12 0X1000
#define clr_12 0XFFFFEFFF
#define set_13 0X2000
#define clr_13 0XFFFFDFFF
#define set_14 0X4000
#define clr_14 0XFFFFBFFF
#define set_15 0X8000
#define clr_15 0XFFFF7FFF
#define set_16 0X10000
#define clr_16 0XFFFEFFFF
#define set_17 0X20000
#define clr_17 0XFFFDFFFF
#define set_18 0X40000
#define clr_18 0XFFFBFFFF
#define set_19 0X80000
#define clr_19 0XFFF7FFFF
#define set_20 0X100000
#define clr_20 0XFFEFFFFF
#define set_21 0X200000
#define clr_21 0XFFDFFFFF
#define set_22 0X400000
#define clr_22 0XFFBFFFFF
#define set_23 0X800000
#define clr_23 0XFF7FFFFF
#define set_24 0X1000000
#define clr_24 0XFEFFFFFF
#define set_25 0X2000000
#define clr_25 0XFDFFFFFF
#define set_26 0X4000000
#define clr_26 0XFBFFFFFF
#define set_27 0X8000000
#define clr_27 0XF7FFFFFF
#define set_28 0X10000000
#define clr_28 0XEFFFFFFF
#define set_29 0X20000000
#define clr_29 0XDFFFFFFF
#define set_30 0X40000000
#define clr_30 0XBFFFFFFF
#define set_31 0X80000000
#define clr_31 0X7FFFFFFF
#define uint32 unsigned int
#define cqdcs 1 //去抖次数
#define c10ms 10
#define c100ms 10
#define c1s 10
/*******************读外部输入********************/
unsigned char uz_qdcs; //去抖次数
unsigned long ul_zcs; //暂存数
unsigned long ul_ccs; //储存数
unsigned long ul_srycz; //输入已操作
/*******************定时器********************/
unsigned char uz_10ms;
unsigned char uz_100ms;
unsigned char uz_1s;
unsigned char uz_zd1msyd;
unsigned char uz_1msyd;
unsigned char uz_10msyd;
unsigned char uz_100msyd;
unsigned char uz_1syd;
unsigned char ul_bza; //标志
/*******************输出********************/
unsigned long ul_sc;
////////////////////////////////////////////////////
void __irq irq_fiq(void) //快速中断 0
{
AIC_ICCR |= set_0;
AIC_EOICR = 0x0;
}
void __irq irq_SYS(void)
{
AIC_ICCR |= set_1;
AIC_EOICR = 0x1;
}
void __irq irq_pioa(void) //并行I/O控制器A 2
{
AIC_ICCR |= set_2;
AIC_EOICR = 0x2;
}
void __irq irq_Reserved(void)
{
AIC_ICCR |= set_3;
AIC_EOICR = 0x3;
}
void __irq irq_adc(void) //模数转换器 4
{
AIC_ICCR |= set_4;
AIC_EOICR = 0x4;
}
void __irq irq_spi(void) //串行外设接口 5
{
AIC_ICCR |= set_5;
AIC_EOICR = 0x5;
}
void __irq irq_us0(void) //USART 0 6
{
AIC_ICCR |= set_6;
AIC_EOICR = 0x6;
}
void __irq irq_us1(void) //USART 1 7
{
AIC_ICCR |= set_7;
AIC_EOICR = 0x7;
}
void __irq irq_ssc(void) //同步串行接口 8
{
AIC_ICCR |= set_8;
AIC_EOICR = 0x8;
}
void __irq irq_twi(void) //两线接口 9
{
AIC_ICCR |= set_9;
AIC_EOICR = 0x9;
}
void __irq irq_pwmc(void) //PWM 控制器 10
{
AIC_ICCR |= set_10;
AIC_EOICR = 10;
}
void __irq irq_udp(void) //USB设备端口 11
{
AIC_ICCR |= set_11;
AIC_EOICR = 11;
}
void __irq irq_Tc0(void) //定时器0中断 12
{
volatile unsigned int s=0;
s=AT91C_BASE_TC0->TC_SR;
uz_zd1msyd = 1;
AIC_ICCR |= set_12;
AIC_EOICR = 12;
}
void __irq irq_Tc1(void) //定时器1中断 13
{
AIC_ICCR |= set_13;
AIC_EOICR = 13;
}
void __irq irq_Tc2(void) //定时器2中断 14
{
AIC_ICCR |= set_14;
AIC_EOICR = 14;
}
void __irq irq_15_Reserved(void)
{
AIC_ICCR |= set_15;
AIC_EOICR = 15;
}
void __irq irq_16_Reserved(void)
{
AIC_ICCR |= set_16;
AIC_EOICR = 16;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -