?? 復件 (5) main.c
字號:
#include "AT91SAM7S64.h"
#include "dy.h"
#include "pddsq.h"
#include "dsr.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 10 //去抖次數
#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;
volatile unsigned char uz_zd2msyd;
unsigned char uz_1msyd;
unsigned char uz_10msyd;
unsigned char uz_100msyd;
unsigned char uz_1syd;
unsigned char ul_bza; //標志
/*******************輸出********************/
unsigned long ul_sc;
/******************液晶緩沖區***************/
unsigned char uc_yjsj[9600];
////////////////////////////////////////////////////
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_zd2msyd = 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;
}
void __irq irq_17_Reserved(void)
{
AIC_ICCR = set_17;
AIC_EOICR = 17;
}
void __irq irq_18_Reserved(void)
{
AIC_ICCR = set_18;
AIC_EOICR = 18;
}
void __irq irq_19_Reserved(void)
{
AIC_ICCR = set_19;
AIC_EOICR = 19;
}
void __irq irq_20_Reserved(void)
{
AIC_ICCR = set_20;
AIC_EOICR = 20;
}
void __irq irq_21_Reserved(void)
{
AIC_ICCR = set_21;
AIC_EOICR = 21;
}
void __irq irq_22_Reserved(void)
{
AIC_ICCR = set_22;
AIC_EOICR = 22;
}
void __irq irq_23_Reserved(void)
{
AIC_ICCR = set_23;
AIC_EOICR = 23;
}
void __irq irq_24_Reserved(void)
{
AIC_ICCR = set_24;
AIC_EOICR = 24;
}
void __irq irq_25_Reserved(void)
{
AIC_ICCR = set_25;
AIC_EOICR = 25;
}
void __irq irq_26_Reserved(void)
{
AIC_ICCR = set_26;
AIC_EOICR = 26;
}
void __irq irq_27_Reserved(void)
{
AIC_ICCR = set_27;
AIC_EOICR = 27;
}
void __irq irq_28_Reserved(void)
{
AIC_ICCR = set_28;
AIC_EOICR = 28;
}
void __irq irq_29_Reserved(void)
{
AIC_ICCR = set_29;
AIC_EOICR = 29;
}
void __irq irq_IRQ0(void)
{
AIC_ICCR = set_30;
AIC_EOICR = 30;
}
void __irq irq_IRQ1(void)
{
AIC_ICCR = set_31;
AIC_EOICR = 31;
}
void hscsh(void); //初始化
void hsszcsh(void); //時鐘初始化
void hskmgcsh(void); //看門狗初始化
void hst0csh(void); //t0初始化
void hszdcsh(void); //中斷初始化
void hsramcsh(void); //RAM初始化
void hsiocsh(void); //io初始化
void hssdys(void); //上電延時
void hsszsz(void); //時鐘設置
void hsqkmg(void); //清看門狗
void hst0sz(void); //t0設置
void hsiosz(void); //io設置
void hszdsz(void); //中斷設置
void hsyjcl(void); //液晶驅動
void hssxsj(void); //刷新數據
void Main(void)
{
hscsh(); //初始化
while(1)
{
//hsszsz(); //時鐘設置
hsiosz(); //io設置
hsqkmg(); //清看門狗
TC0_CCR=0x02; // reset start軟件觸發命令軟件觸發執行:計數器復位,時鐘啟動。
hsyjcl(); //液晶驅動
hszdsz(); //中斷設置
hst0csh(); //t0初始化
hssxsj(); //刷新數據
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -