📄 lcodu_init.c
字号:
unsigned char reset_timer0()
{ unsigned int dummy;
//if(v_tmatpc==0) return ACK_CMDNOTEXE;
//tc0
AT91C_BASE_PMC->PMC_PCER = 1<<AT91C_ID_TC0;
//* Disable the clock and the interrupts
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF ;
//* Clear status bit
dummy = AT91C_BASE_TC0->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//* Set the Mode of the Timer Counter;SELECT THE TCCLKS AND ENBALBE CPCTRG
AT91C_BASE_TC0->TC_CMR = TC_CLKS_MCK1024 |AT91C_TC_CPCTRG;
//AT91C_BASE_TC1->TC_CMR = TC_CLKS_MCK1024 ;
//* Enable the clock
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN ;
//RC
AT91C_BASE_TC0->TC_RC = RC_8MS;
//* Open tc1 interrupt
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler);
// IRQ enable CPC
AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
//* Start timer0
AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
return 0;
}
#endif
void close_timer0()
{
//* Disable the clock and the interrupts
AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF ;
}
//*-----------------------------------------------------------------------------
//* Function Name : US_int
//* Object : initiate US0 and US1.
//* autor : wang ping
//* Input Parameters : none
//* Output Parameters : none
//*-----------------------------------------------------------------------------
void US_int()
{
AT91PS_USART COM0 = AT91C_BASE_US0;
//* Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
((unsigned int) AT91C_PA5_RXD0 ) |
((unsigned int) AT91C_PA6_TXD0 ) , // Peripheral A
0); // Peripheral B
// First, enable the clock of the PIOA
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ;
// Usart Configure
AT91F_US_Configure (COM0, MCK, AT91C_US_ASYNC_MODE_WP, AT91_BAUD_RATE, 0);
//initiation the adc pdc
AT91F_PDC_Open (AT91C_BASE_PDC_US0);
//Set the PDC buffer and counter ; only use the first buffer
AT91F_PDC_ReceiveFrame ( AT91C_BASE_PDC_US0 , (char *) &us0_recv_dma[0], MAX_RECV_BUF,0,0);
//enbale pdc interrupt
COM0->US_IDR = 0xffffffff;
COM0->US_IER = AT91C_US_RXBUFF;
//* open Usart 1 interrupt
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, US0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, US0_c_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
// Enable usart
COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
// AT91F_US_PutChar (COM0,'X');
//usart1
AT91PS_USART COM1 = AT91C_BASE_US1;
//* Configure PIO controllers to periph mode
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
((unsigned int) AT91C_PA21_RXD1 ) |
((unsigned int) AT91C_PA22_TXD1 ) , // Peripheral A
0); // Peripheral B
// First, enable the clock of the PIOA
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US1 ) ;
// Usart Configure
AT91F_US_Configure (COM1, MCK, AT91C_US_ASYNC_MODE_WP, AT91_BAUD_RATE, 0);
//initiation the adc pdc
AT91F_PDC_Open (AT91C_BASE_PDC_US1);
//Set the PDC buffer and counter ; only use the first buffer
AT91F_PDC_ReceiveFrame ( AT91C_BASE_PDC_US1 , (char *) &us1_recv_dma[0], MAX_RECV_BUF,0,0);
//enbale pdc interrupt
COM1->US_IDR = 0xffffffff;
COM1->US_IER = AT91C_US_RXBUFF;
//* open Usart 1 interrupt
AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, US1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, US1_c_irq_handler);
AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1);
// Enable usart
COM1->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
AT91F_US_PutChar (COM1,'X');
}
//*-----------------------------------------------------------------------------
//* Function Name : init_pio
//* Object : initiate PIO,enable PIO clock.
//* autor : wang ping
//* Input Parameters : none
//* Output Parameters : none
//*-----------------------------------------------------------------------------
void init_pio()
{
unsigned int tmp;
AT91C_BASE_PIOA->PIO_PDR = PA17_TEMP;
AT91C_BASE_PMC->PMC_PCER = 1 << AT91C_ID_PIOA; // 允许PIO时钟
tmp=0;
tmp=0;
tmp=(BIT0|BIT1|BIT2|BIT4|BIT7|BIT16|BIT18|BIT19|BIT23|BIT24|BIT25|BIT26|PA12_MUTE|BIT28|PA15_LE1|PA8_LED);//|AT91C_PA20_IRQ0|AT91C_PA30_IRQ1
AT91C_BASE_PIOA->PIO_PER = tmp; // 配置PA0为输出->att0 and att1
AT91C_BASE_PIOA->PIO_OER = tmp;
AT91C_BASE_PIOA->PIO_SODR= tmp;
//AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, tmp ) ;
}
//*-----------------------------------------------------------------------------
//* Function Name : initiation
//* Object : initiate RTT.And it's the entrance of the initiation
//* autor : wang ping
//* Input Parameters : none
//* Output Parameters : none
//*-----------------------------------------------------------------------------
void initiation(void)
{
//4HZ,即每秒计4次
AT91C_BASE_RTTC->RTTC_RTMR = 0X2000;
ADC_int();
IRQ_int();
TC_int();
US_int();
init_pio();
//the below is for test
#if(0)
unsigned int wzm_temp1;
short wzm_temp2,wzm_temp3;
for(wzm_temp2=0;wzm_temp2<US0_TX_MAX;wzm_temp2++)
{
US0_TX_Buffer[wzm_temp2]=wzm_temp2+10;
US1_TX_Buffer[wzm_temp2]=wzm_temp2*2;
}
if (AT91F_PDC_IsTxEmpty(AT91C_BASE_PDC_US0))
AT91F_PDC_SetTx(AT91C_BASE_PDC_US0, (char *)&US0_TX_Buffer, US0_TX_MAX);
if (AT91F_PDC_IsTxEmpty(AT91C_BASE_PDC_US1))
AT91F_PDC_SetTx(AT91C_BASE_PDC_US1, (char *)&US1_TX_Buffer, US1_TX_MAX);
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
//LED --PA8
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED1 ) ;
AT91C_BASE_PMC->PMC_PCER = 1<<AT91C_ID_SPI;
AT91F_PIO_CfgPeriph( AT91C_BASE_PIOA,
((unsigned int) AT91C_PA11_NPCS0 ) |
((unsigned int) AT91C_PA13_MOSI )|((unsigned int)AT91C_PA14_SPCK) , // Peripheral A
0); // Peripheral B
//reset spi
AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SWRST;
AT91C_BASE_SPI->SPI_CR = AT91C_SPI_LASTXFER;
//master
AT91C_BASE_SPI->SPI_MR = AT91C_SPI_MSTR | 44<<24 ;
AT91C_BASE_SPI->SPI_CSR[0] = AT91C_SPI_NCPHA|AT91C_SPI_CPOL|AT91C_SPI_BITS_16|22<<8;
//enable
AT91C_BASE_SPI->SPI_CR = AT91C_SPI_SPIEN;
wzm_temp3 = 0x0000;
while(1)
{
wzm_temp3 =wzm_temp3+0x100;
if (wzm_temp3 > 0xf00) wzm_temp3 =0;
AT91C_BASE_SPI->SPI_TDR = wzm_temp3;
wzm_temp1=AT91C_BASE_RTTC->RTTC_RTVR;
wzm_temp2 = wzm_temp1%4;
if(wzm_temp2)
{
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1 );
}
else
{
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1 );
}
// printf("..%d",wzm_temp1);
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -