📄 main.c
字号:
((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 + -