📄 main.bak
字号:
#include <AT91SAM7S64.h>
unsigned int ppt=0;
void delay_1ms(unsigned int n)
{
unsigned int i;
unsigned int j;
for (j=0;j<n;j++)
{
for (i=0;i<3000;i++);
}
}
void irp_in(void) __irq
{
// int i;
// i=*AT91C_AIC_IVR;
if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA0) *AT91C_PIOA_CODR=0X01;
else *AT91C_PIOA_SODR=0X01;
*AT91C_AIC_EOICR = 0x00;
}
//---------------------------------------------------------------
void io_irq_handler(void) __irq
{
if(*AT91C_PIOA_ISR&(1<<28|1<<29))
{
if(!(*AT91C_PIOA_PDSR&(1<<28)))
{
if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA1) *AT91C_PIOA_CODR=0X02;
else *AT91C_PIOA_SODR=0X02;
}
else if(!(*AT91C_PIOA_PDSR&(1<<29)))
{
if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA2) *AT91C_PIOA_CODR=0X04;
else *AT91C_PIOA_SODR=0X04;
}
}
*AT91C_AIC_EOICR = 0; /* End of Interrupt */
}
void TC2_int(void) __irq
{
unsigned int i;
i= *AT91C_TC2_SR;
if((*AT91C_PIOA_ODSR)&AT91C_PIO_PA3) *AT91C_PIOA_CODR=0X08;
else *AT91C_PIOA_SODR=0X08;
ptt++;
*AT91C_US0_RHR=ptt;
*AT91C_AIC_EOICR = 0x00;
}
void usart_irq_handler(void) __irq
{
*AT91C_US0_THR=*AT91C_US0_RHR&0xff;
*AT91C_AIC_EOICR = 0x00;
}
void mcu_init(void)
{
//------------------setup pio-----------------------
*AT91C_PIOA_PER = 0xffffffff;
*AT91C_PIOA_PDR = AT91C_PA30_IRQ1|AT91C_PA5_RXD0|AT91C_PA6_TXD0;
*AT91C_PIOA_ASR = AT91C_PA30_IRQ1|AT91C_PA5_RXD0|AT91C_PA6_TXD0;
*AT91C_PIOA_PPUER=AT91C_PA30_IRQ1;
*AT91C_PIOA_IFER = 0xfffffff0;
*AT91C_PIOA_OER = AT91C_PIO_PA0 | AT91C_PIO_PA1|
AT91C_PIO_PA2 | AT91C_PIO_PA3;
*AT91C_PIOA_SODR=0xffffffff; //clear outpin
*AT91C_PMC_PCER = (unsigned int)1<<AT91C_ID_TC2 |(unsigned int)1<<AT91C_ID_US0|
(unsigned int)1<<AT91C_ID_PIOA|(unsigned int)1<<AT91C_ID_IRQ1;
//-------------------setup timer2----------------------
*AT91C_TC2_CCR = AT91C_TC_CLKEN;
*AT91C_TC2_CMR = AT91C_TC_WAVE|AT91C_TC_WAVESEL_UP_AUTO|AT91C_TC_CLKS_TIMER_DIV5_CLOCK;
*AT91C_TC2_RC = 65535;
*AT91C_TC2_IER = AT91C_TC_CPCS;
AT91C_AIC_SMR[AT91C_ID_TC2] = AT91C_AIC_PRIOR_LOWEST|AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE;
AT91C_AIC_SVR[AT91C_ID_TC2]=(unsigned int)*TC2_int;
*AT91C_TC2_CCR = AT91C_TC_SWTRG;
//--------------------setup IRQ1-----------------------
AT91C_AIC_SMR[AT91C_ID_IRQ1]=AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE|0x03;
AT91C_AIC_SVR[AT91C_ID_IRQ1]=(unsigned long) *irp_in;
//--------------------setup pio interuput--------------
*AT91C_AIC_IDCR = 1<<AT91C_ID_PIOA; // stop int
*AT91C_PIOA_PER = AT91C_PIO_PA29 | AT91C_PIO_PA28;
*AT91C_PIOA_ODR = AT91C_PIO_PA29 | AT91C_PIO_PA28;
*AT91C_PIOA_IER = AT91C_PIO_PA29 | AT91C_PIO_PA28;
*AT91C_AIC_ICCR = 1<<AT91C_ID_PIOA; //clear int
AT91C_AIC_SMR[AT91C_ID_PIOA] = AT91C_AIC_SRCTYPE_HIGH_LEVEL|0x01 ;
AT91C_AIC_SVR[AT91C_ID_PIOA]=(unsigned int)*io_irq_handler;
//-------------------setup usart-----------------------
*AT91C_US0_CR=AT91C_US_RXEN|AT91C_US_TXEN;
*AT91C_US0_MR=AT91C_US_USMODE_NORMAL|AT91C_US_CLKS_CLOCK|AT91C_US_CHRL_8_BITS|
AT91C_US_PAR_NONE|AT91C_US_NBSTOP_1_BIT|AT91C_US_MSBF;
*AT91C_US0_BRGR=78;
*AT91C_US0_IER=AT91C_US_RXRDY;//|AT91C_US_TXRDY;
AT91C_AIC_SMR[AT91C_ID_US0] = AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|0x01 ;
AT91C_AIC_SVR[AT91C_ID_US0]=(unsigned int)*usart_irq_handler|0X05;
*AT91C_AIC_IECR =(unsigned int)1<<AT91C_ID_PIOA|(unsigned int)1<<AT91C_ID_IRQ1|
(unsigned int)1<<AT91C_ID_US0 |(unsigned int)1<<AT91C_ID_TC2;
}
int main (void)
{
mcu_init();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -