📄 main.c
字号:
#include <stdio.h>
#include "lib_arm920t.h"
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"
#define MCK 60000000
//配置SSC0 SSC1地址
AT91PS_SSC pSSC0 = AT91C_BASE_SSC0;
AT91PS_SSC pSSC1 = AT91C_BASE_SSC1;
AT91PS_SSC pSSC2 = AT91C_BASE_SSC2;
extern void AT91F_IRQ0_ASM_HANDLER(void); //PB29(J6)IRQ0中断函数
extern void AT91F_IRQ1_ASM_HANDLER(void); //PA25(E13)IRQ1中断函数
extern void AT91F_SSC0_ASM_HANDLER(void); //SSC0中断函数
extern void AT91F_SSC2_ASM_HANDLER(void); //SSC0中断函数
extern void AT91F_US0_ASM_HANDLER(void); //US0中断函数
extern void AT91F_DBGU_Printk(char *); //DBGU发函数
unsigned short ssc2_rec[24];
unsigned int SSC2_flag=0,SSC2_recv=0;
/////////////////////////////////////////////////////////////////////////////////////////////////////
//*----------------------------------------------------------------------------
//* \fn AT91F_DataAbort
//* \brief This function reports an Abort
//*----------------------------------------------------------------------------
void AT91F_SpuriousHandler()
{
AT91F_DBGU_Printk("-F- Spurious Interrupt detected\n\r");
while (1);
}
//*----------------------------------------------------------------------------
//* \fn AT91F_DataAbort
//* \brief This function reports an Abort
//*----------------------------------------------------------------------------
void AT91F_DataAbort()
{
AT91F_DBGU_Printk("-F- Data Abort detected\n\r");
while (1);
}
//*----------------------------------------------------------------------------
//* \fn AT91F_FetchAbort
//* \brief This function reports an Abort
//*----------------------------------------------------------------------------
void AT91F_FetchAbort()
{
AT91F_DBGU_Printk("-F- Prefetch Abort detected\n\r");
while (1);
}
//*----------------------------------------------------------------------------
//* \fn AT91F_Undef
//* \brief This function reports an Abort
//*----------------------------------------------------------------------------
void AT91F_Undef()
{
AT91F_DBGU_Printk("-F- Undef detected\n\r");
while (1);
}
//*----------------------------------------------------------------------------
//* \fn AT91F_UndefHandler
//* \brief This function reports that no handler have been set for current IT
//*----------------------------------------------------------------------------
void AT91F_UndefHandler()
{
AT91F_DBGU_Printk("-F- Undef detected\n\r");
while (1);
}
void delay(int n)
{
int i;
for(i=0;i<n;i++);
}
void AT91F_US0_SEND(
char *buffer) // \arg pointer to a string ending by \0
{
while(*buffer != '\0')
{
while (!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_US0));
AT91F_US_PutChar(AT91C_BASE_US0, *buffer++);
}
}
//SSC0收中断程序
void AT91F_SSC0_HANDLER(void)
{
;
}
//SSC2收中断程序
void AT91F_SSC2_HANDLER(void)
{
int temp;
temp= *AT91C_SSC2_RHR ;
if((temp==0x13ec)&&(SSC2_flag==0))
{
ssc2_rec[0]=temp;
SSC2_flag=1;
SSC2_recv++;
}
else if(SSC2_flag==1)
{
ssc2_rec[SSC2_recv]=*AT91C_SSC2_RHR ;
SSC2_recv++;
if(SSC2_recv>=24)
{
SSC2_flag=0;
}
}
}
//IRQ0收中断程序
void AT91F_IRQ0_HANDLER(void)
{
;
}
//IRQ2收中断程序
void AT91F_IRQ1_HANDLER(void)
{
;
}
//US0收中断程序
void AT91F_US0_HANDLER(void)
{
//禁止US0的中断
AT91F_AIC_DisableIt(AT91C_BASE_AIC, AT91C_ID_US0);
}
//US0收中断初始化
void AT91F_US0_Init(void)
{
AT91F_US0_CfgPIO(); //配置为US0
AT91F_US0_CfgPMC(); //must add
AT91F_US_Configure(
AT91C_BASE_US0, // US0 base address
60000000, // 60 MHz
AT91C_US_ASYNC_MODE , // mode Register to be programmed
115200 , // baudrate to be programmed
0);
// Enable Transmitter
AT91F_US_EnableTx(AT91C_BASE_US0);
AT91F_US_EnableRx(AT91C_BASE_US0);
//串口收中断使能
*AT91C_US0_IER=0x1;
//安装串口0的中断服务程序
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_US0, //中断源号码6 // System peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
AT91F_US0_ASM_HANDLER ); //串口0的中断服务程序入口;.S文件中EXPORT
//打开US0收数中断
// AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_US0);
}
//PB29(IRQ0)中断初始化
void AT91F_PIO_Init(void)
{
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOB, // PIO controller base address
((unsigned int) AT91C_PB29_IRQ0),
0); // Peripheral B
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_IRQ0, // System peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,
AT91F_IRQ0_ASM_HANDLER );
}
//PA25(IRQ2)中断初始化
void AT91F_PI1_Init(void)
{
AT91F_PIO_CfgPeriph(
AT91C_BASE_PIOA, // PIO controller base address
((unsigned int) AT91C_PA25_IRQ2),
0); // Peripheral B
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_IRQ2, // System peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,
AT91F_IRQ1_ASM_HANDLER );
}
//SSC0收中断初始化
void AT91F_SSC0_Init(void)
{
//* Configure SSC0 PIOs TF/TK/TD & RD and must loop RD/TD
*AT91C_PIOB_PDR= ((unsigned int) AT91C_PB3_RD0 ) |
((unsigned int) AT91C_PB2_TD0 ) |
((unsigned int) AT91C_PB1_TK0 ) |
((unsigned int) AT91C_PB4_RK0 ) |
((unsigned int) AT91C_PB0_TF0 ) |
((unsigned int) AT91C_PB5_RF0 );
*AT91C_PIOB_ASR= ((unsigned int) AT91C_PB2_TD0 ) |
((unsigned int) AT91C_PB1_TK0 ) |
((unsigned int) AT91C_PB4_RK0 ) |
((unsigned int) AT91C_PB0_TF0 ) |
((unsigned int) AT91C_PB3_RD0 ) |
((unsigned int) AT91C_PB5_RF0 ) ;
*AT91C_PMC_PCER |= 1 << AT91C_ID_SSC0;
*AT91C_SSC0_CR = AT91C_SSC_SWRST ;
AT91F_PDC_Close((AT91PS_PDC) &(pSSC0->SSC_RPR));
// *AT91C_SSC0_CMR = 5;
*AT91C_SSC0_CMR = 5;
*AT91C_SSC0_RCMR = 0x10402;
*AT91C_SSC0_RFMR = 0x8F;
*AT91C_SSC0_TCMR = 0x10000424;
*AT91C_SSC0_CR = AT91C_SSC_TXEN | AT91C_SSC_RXEN; /* Enable Tx */
//串口收中断使能
*AT91C_SSC0_IER=0x10;
//安装串口0的中断服务程序
AT91F_AIC_ConfigureIt (
AT91C_BASE_AIC, // AIC base address
AT91C_ID_SSC0, //中断源号码6 // System peripheral ID
AT91C_AIC_PRIOR_HIGHEST, // Max priority
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
AT91F_SSC0_ASM_HANDLER ); //串口0的中断服务程序入口;.S文件中EXPORT
//打开SSC0收数中断
//AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SSC0);
}
void AT91F_SSC1_Init(void)
{
//* Configure SSC1 PIOs TF/TK/TD
*AT91C_PIOB_PDR= ((unsigned int) AT91C_PB9_RD1 ) |
((unsigned int) AT91C_PB10_RK1 ) | //add by hhf
((unsigned int) AT91C_PB11_RF1 ) | //add by hhf
((unsigned int) AT91C_PB8_TD1 ) |
((unsigned int) AT91C_PB7_TK1 ) |
((unsigned int) AT91C_PB6_TF1 ) ;
/*********************************************************************************/
*AT91C_PIOB_ASR= ((unsigned int) AT91C_PB9_RD1 ) |
((unsigned int) AT91C_PB10_RK1 ) |
((unsigned int) AT91C_PB11_RF1 ) |
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -