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

📄 main.c

📁 AT91RM9200控制AMBE200声码话的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
					 ((unsigned int) AT91C_PB8_TD1     ) |
					 ((unsigned int) AT91C_PB7_TK1     ) |
			 		 ((unsigned int) AT91C_PB6_TF1     ) ;
/*********************************************************************************/
   	*AT91C_PMC_PCER |= 1 << AT91C_ID_SSC1;    /* enable the SSC1 peripheral clock */
    *AT91C_SSC1_CR = AT91C_SSC_SWRST ;
	AT91F_PDC_Close((AT91PS_PDC) &(pSSC1->SSC_RPR));
    *AT91C_SSC1_CMR = 0;      //modified by hhf 时钟分频器无效
 //时钟RK引脚,RK引脚是输入模式,接收启动模式为连续,RF下降沿启动接收
	*AT91C_SSC1_RCMR=0x00000402;
	*AT91C_SSC1_RFMR=0x0000008f;//数据长度16bit,高位在先,一帧一个数据字 
//时钟TK引脚,TK引脚是输入模式,发送启动是检测TF上升沿模式,//发送启动延迟设置为0
	*AT91C_SSC1_TCMR=0x00000422;
	*AT91C_SSC1_TFMR=0x000000af;//数据长度16bit,数据默认值设置为1,高位在先,一帧一个数据字,
								//帧同步引脚设置为一个SCLK,TF引脚设置为单输入.
	AT91C_BASE_SSC1->SSC_IDR = 0xffffffff;	 //中断禁用
	//* Enable TX & RX
	*AT91C_SSC1_CR = AT91C_SSC_TXEN | AT91C_SSC_RXEN;  
}

void AT91F_SSC2_Init(void)
{
	*AT91C_PIOB_PDR= ((unsigned int) AT91C_PB15_RD2     ) |			 
					 ((unsigned int) AT91C_PB14_TD2     ) |
					 ((unsigned int) AT91C_PB13_TK2     ) |
					 ((unsigned int) AT91C_PB16_RK2     ) |
					 ((unsigned int) AT91C_PB12_TF2     ) |
					 ((unsigned int) AT91C_PB17_RF2     );
/*********************************************************************************/
	*AT91C_PIOB_ASR= ((unsigned int) AT91C_PB14_TD2    ) |
					 ((unsigned int) AT91C_PB13_TK2    ) | 
					 ((unsigned int) AT91C_PB16_RK2    ) |
					 ((unsigned int) AT91C_PB12_TF2    ) |
					 ((unsigned int) AT91C_PB17_RF2    ) |
			 		 ((unsigned int) AT91C_PB15_RD2   ) ;
/*********************************************************************************/
   // AT91F_SSC2_CfgPMC();
    *AT91C_PMC_PCER |= 1 << AT91C_ID_SSC2;    /* enable the SSC2 peripheral clock */
    
    *AT91C_SSC2_CR = AT91C_SSC_SWRST ;
	
	AT91F_PDC_Close((AT91PS_PDC) &(pSSC2->SSC_RPR));
    
    *AT91C_SSC2_CMR =  234;   //128分频
/*    
	*AT91C_SSC2_RCMR = AT91C_SSC_CKS_TK |
					   ((1<<16) & AT91C_SSC_STTDLY) |
					   (0x1 << 8 )| AT91C_SSC_CKI | AT91C_SSC_START_TX;
					   
	*AT91C_SSC2_RFMR = ((1-1) << 8) & AT91C_SSC_DATNB |
					   AT91C_SSC_MSBF |
					   (31-1);
					   
	*AT91C_SSC2_TFMR = AT91C_SSC_FSOS_NEGATIVE |
					   ((0xf<<16) & AT91C_SSC_FSLEN) |
					   ((0x1<<8) & AT91C_SSC_DATNB)  |
					   AT91C_SSC_MSBF |
					   0xf;
	
	*AT91C_SSC2_TCMR = (0x1f << 24) |
					   ((0x1<<16) & AT91C_SSC_STTDLY) |
					   AT91C_SSC_START_FALL_RF |
					   AT91C_SSC_CKO_CONTINOUS |AT91C_SSC_CKS_DIV ;			   
*/
  *AT91C_SSC2_RCMR = 0x0010502;
  *AT91C_SSC2_RFMR = 0x000008f;
/*	
	*AT91C_SSC2_TFMR = AT91C_SSC_FSOS_POSITIVE |
					   ((0x0<<16) & AT91C_SSC_FSLEN) |
					   ((0x3<<8) & AT91C_SSC_DATNB)  |
					   AT91C_SSC_MSBF |
					   (0xf & AT91C_SSC_DATLEN)|0 ;
	
	*AT91C_SSC2_TCMR = ((0x1f<<24) & AT91C_SSC_PERIOD) |
					   ((0x1<<16) & AT91C_SSC_STTDLY) |
					   AT91C_SSC_START_RISE_RF | AT91C_SSC_CKI |
					   AT91C_SSC_CKO_CONTINOUS |AT91C_SSC_CKS_DIV |0 ;
	
	*AT91C_SSC2_RFMR = AT91C_SSC_FSOS_POSITIVE |
						((0<<16) & AT91C_SSC_FSLEN) |
						((0x3<<8) & AT91C_SSC_DATNB) | 
						AT91C_SSC_MSBF | 
						(0xf & AT91C_SSC_DATLEN)|0;

	*AT91C_SSC2_RCMR = ((0x1f<<24) & AT91C_SSC_PERIOD) |
					   ((0x1<<16) & AT91C_SSC_STTDLY) |
					   AT91C_SSC_START_RISE_RF | AT91C_SSC_CKI |
					   AT91C_SSC_CKG_NONE |AT91C_SSC_CKS_TK |0 ;
*/
//	*AT91C_SSC2_TCMR = 0x01000504;
	*AT91C_SSC2_TCMR = 0x00000424;
	*AT91C_SSC2_TFMR = 0x000000af;   //16bit
	//串口收中断使能
	AT91C_BASE_SSC2->SSC_IDR = 0xffffffff;	 //中断禁用
	*AT91C_SSC2_CR = AT91C_SSC_TXEN | AT91C_SSC_RXEN;    /* Enable Tx */
	*AT91C_SSC2_IER=0x10;
	//安装串口2的中断服务程序
//    AT91F_AIC_ConfigureIt (
//		AT91C_BASE_AIC, 			// AIC base address
//		AT91C_ID_SSC2,  			//中断源号码6                        // System peripheral ID
//		AT91C_AIC_PRIOR_HIGHEST,    // Max priority
//		AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
//		AT91F_SSC2_ASM_HANDLER );	//串口2的中断服务程序入口;.S文件中EXPORT
   	 //打开SSC2收数中断
//	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_SSC2);
}

void AT91F_PMC_AC(void)
{   //*****************************************************
	AT91F_PIOA_CfgPMC();
	//AIC10-RST
	AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA4);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA4);  
	//PWDA
	AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA19);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA19);
    //AMBE-RST
	AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA20);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA20);
    //K2
    AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA27);
	AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA27);
	//K1
    AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA28);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA28);
    //PWDC
	AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA28);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA28);
    //*****************************************************
    AT91F_PIOC_CfgPMC();
    //SLEEP-AMBE
	AT91F_PIO_Enable(AT91C_BASE_PIOC,AT91C_PIO_PC2);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOC,AT91C_PIO_PC2);
    //TECT
    AT91F_PIO_Enable(AT91C_BASE_PIOC,AT91C_PIO_PC13);  
    AT91F_PIO_OutputEnable(AT91C_BASE_PIOC,AT91C_PIO_PC13); 
	//*****************************************************
	//RST-AIC10
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA4);
	delay(1000);
    AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA4);
    //RST-AMBE
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA20);
	delay(1000);
    AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA20);
}

void AIC10_Init(void)
{
	unsigned short a[8]={0x0001,0x0200,0x0001,0x0408,0x0001,0x0600,0x0001,0x0800};
	int i;
	
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA27);  //K2低
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA28);  //K1低
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA19);  //PWDA高
	
	*AT91C_SSC1_THR = a[0];
	for(i=1;i<8;i++)
	{
		while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */	
  		*AT91C_SSC1_THR = a[i]; 
	}	
}

void AMBE2000_Init(void)
{	unsigned short a[24]={0x13ec,0x0000,0x1030,0x0001,0x0000,0x4230,0x0048,0x0000,0x0000,0x0000,0x0000,0x8011,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
	unsigned int b[25];
	int i;
	
	AT91F_PIO_SetOutput(AT91C_BASE_PIOC,AT91C_PIO_PC13);  //TECT
	AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA28);  //K1高
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA27);  //K2低
	
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PC13);  //TECT低
	AT91F_PIO_ClearOutput(AT91C_BASE_PIOC,AT91C_PIO_PC2);	//SLEEP低
	
//	*AT91C_SSC2_TFMR =	 0x20008f;   //16bit
//	for(i=0;i<24;i++)
//	{ 
//		*AT91C_SSC2_THR = a[i];   /* Write the TD data */
//			while((*AT91C_SSC2_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */
//	}
//	*AT91C_SSC2_TFMR = 0x18f;      //close Td

//	*AT91C_SSC2_TFMR =	 0x20008f;   //16bit
//	while(1)
//	{
//				*AT91C_SSC2_THR = 0xaa55;   /* Write the TD data */
//			while((*AT91C_SSC2_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */
//	}
	while(1)
	{
			for(i=1;i<25;i++)
			{
				 while((*AT91C_SSC2_SR & AT91C_SSC_RXRDY)==0){ } /* Wait ready */	  
			 		b[i]= *AT91C_SSC2_RHR;
			}
	}
	delay(1);
}

void IRQ_init(void)
{
	AT91F_PMC_AC();		//初始化GPIO端口
	AT91F_US0_Init();	//US0收中断初始化
	AT91F_PIO_Init();	//PB29(IRQ0)中断初始化
	AT91F_PI1_Init();	//PA25(IRQ2)中断初始化
	AT91F_SSC0_Init();	//SSC0初始化(DSP)
	AT91F_SSC1_Init();	//SSC1初始化(TI320AIC10 CMX639)
	AT91F_SSC2_Init();  //SSC2初始化(AMBE2000 MAX3232)
}


int main()
{		
	// Init Interrupt Controller
	AT91F_AIC_Open(
		AT91C_BASE_AIC,          // pointer to the AIC registers
		AT91C_AIC_BRANCH_OPCODE, // IRQ exception vector
		AT91F_UndefHandler,      // FIQ exception vector
		AT91F_UndefHandler,      // AIC default handler
		AT91F_SpuriousHandler,   // AIC spurious handler
		0); 
	// Perform 8 End Of Interrupt Command to make s齬e AIC will not Lock out nIRQ 
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_AcknowledgeIt(AT91C_BASE_AIC);
	AT91F_AIC_SetExceptionVector((unsigned int *)0x0C, AT91F_FetchAbort);
	AT91F_AIC_SetExceptionVector((unsigned int *)0x10, AT91F_DataAbort);
	AT91F_AIC_SetExceptionVector((unsigned int *)0x4, AT91F_Undef);
	AT91F_EnableICache();
	AT91F_EnableDCache();
	IRQ_init();
	AIC10_Init();
	AMBE2000_Init();
//	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ0);
//	AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_IRQ2);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -