⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 AT91RM9200控制AMBE200声码话的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -