📄 main.c
字号:
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : main.c
//* Object : main application written in C
//* Creation : FB 24/10/2002
//*
//*----------------------------------------------------------------------------
extern void AT91F_DBGU_Printk(char *);
#include "AT91RM9200.h"
#include "lib_AT91RM9200.h"
//#include "extern.h"
/***************************declare global variable****************************/
//AIC 10的配置参数
volatile unsigned int data_out[8]={0x0001,0x0200,0x0001,0x0404,0x0001,0x0600,0x0001,0x0800};
//1kHz余弦波
volatile int data_out1[16]={8000,7390,5656,3060,0,-3060,-5656,-7390,-8000,-7390,-5656,-3060,0,3060,5656,7390};
//2kHz余弦波
volatile int data_out2[8]={8000,5656,0,-5656,-8000,-5656,0,5656};
// volatile int data_out1[12]={0xfa0,0xd88,0x7d0,0x0,0xf830,0xf278,0xf060,0xf278,0xf830,0x0,0x7d0,0xd88};
volatile unsigned int data_in[16];
AT91PS_SSC pSSC=AT91C_BASE_SSC1;
/***************************declare global variable****************************/
void delay(int i)
{
for(;i>0;i--)
;
}
void ambe_rst(void)
{
AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA20); //配置为I/O口
AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA20); // I/O口上拉
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA20); //低电平
delay(10000);
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA20); //高电平
}
void EnAIC10(void)
{
//数字话明话 SSC1←→AIC10
//K2
AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA27); //配置为I/O口
AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA27); // I/O口上拉
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA27); //高电平
delay(1000);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA27); //低电平
//K1
AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA28); //配置为I/O口
AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA28); // I/O口上拉
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA28); //高电平
delay(1000);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA28); //低电平
//PWDA
AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA19); //配置为I/O口
AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA19); // I/O口上拉
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA19); //低电平
delay(1000);
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA19); //高电平
//ARST 复位AIC10
AT91F_PIO_Enable(AT91C_BASE_PIOA,AT91C_PIO_PA4); //配置为I/O口
AT91F_PIO_OutputEnable(AT91C_BASE_PIOA,AT91C_PIO_PA4); // I/O口上拉
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA4); //高电平
delay(100);
AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,AT91C_PIO_PA4); //低电平
delay(100);
AT91F_PIO_SetOutput(AT91C_BASE_PIOA,AT91C_PIO_PA4); //高电平
}
void AIC10_R_W(void)
{
int i,j;
//* 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 ) |
((unsigned int) AT91C_PB8_TD1 ) |
((unsigned int) AT91C_PB7_TK1 ) |
((unsigned int) AT91C_PB6_TF1 ) ;
/*********************************************************************************/
//* Configure PMC by enabling SSC1 clock
*AT91C_PMC_PCER |= 1 << AT91C_ID_SSC1; /* enable the SSC1 peripheral clock */
//* Reset All the Peripheral
*AT91C_SSC1_CR = AT91C_SSC_SWRST ;
//* Clear Transmit and Receive Counters
AT91F_PDC_Close((AT91PS_PDC) &(pSSC->SSC_RPR));
//* Define the Clock Mode Register
// for MCK ei 60000000 => 21
*AT91C_SSC1_CMR = 0; //modified by hhf 时钟分频器无效
// *AT91C_SSC1_RCMR=0x00000402;//时钟RK引脚,RK引脚是输入模式,接收启动模式为连续,RF下降沿启动接收
*AT91C_SSC1_RCMR=0x00000402;
*AT91C_SSC1_RFMR=0x0000008f;//数据长度16bit,高位在先,一帧一个数据字
// *AT91C_SSC1_TCMR=0x00000522;//时钟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;
//AIC10初始化
*AT91C_SSC1_THR = data_out[0];
for (i=1;i<8;i++)
{
/* Write the TD data */
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */
*AT91C_SSC1_THR = data_out[i];
}
//*************以下配置AIC10的DAC通道为16bit传输模式********************
// *AT91C_SSC1_THR = 0x0001;
// while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */
// *AT91C_SSC1_THR = 0x0201;
// while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ } /* Wait ready */
//**********************************************************************
/********************以下循环发送1kHz余弦波***************************/
/*
while(1)
{
for(i=0;i<16;i++)
{
*AT91C_SSC1_THR = data_out1[i];
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }
}
}
*/
/***********************************************************************/
/********************以下循环发送2kHz余弦波***************************/
/*
while(1)
{
for(i=0;i<8;i++)
{
*AT91C_SSC1_THR = data_out2[i];
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }
}
}
*/
/***********************************************************************/
/********************以下循环发送1kHz余弦波并接收数据***************************/
j=0;
i=1;
*AT91C_SSC1_THR = data_out2[0];
//读出RHR
data_in[0]= *AT91C_SSC1_RHR ; //读出RHR
while((*AT91C_SSC1_SR & AT91C_SSC_RXRDY)==0){ }//查询是否接收准备好
while(1)
{
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }//查询是否发送完
*AT91C_SSC1_THR = data_out2[i]; //发送第i个样点
// data_in[i]= *AT91C_SSC1_RHR ;
while((*AT91C_SSC1_SR & AT91C_SSC_RXRDY)==0){ }//查询是否接收准备好
data_in[i]= *AT91C_SSC1_RHR ;
i=i+1;
j=j+1;
if(i==8) i=0;
if(j==100) break;
}
while(1)
{
for(i=0;i<8;i++)
{
*AT91C_SSC1_THR = (data_in[i]>>1)<<1;
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }
}
}
/***********************************************************************/
/*
while (1)
{
//请求从通信
*AT91C_SSC1_THR = 0x0001;
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }//查询是否发完
*AT91C_SSC1_THR = 0x1400; //发送读寄存器2命令
//读出RHR
while((*AT91C_SSC1_SR & AT91C_SSC_RXRDY)==0){ }//查询是否接收准备好
data_in[0]= *AT91C_SSC1_RHR ; //读出RHR
while((*AT91C_SSC1_SR & AT91C_SSC_TXRDY)==0){ }//查询是否发完
delay(1000);
AT91C_BASE_DBGU->DBGU_THR=(data_in[0]);
}
*/
}
int main()
{
ambe_rst();//禁止ambe2000
EnAIC10();
AIC10_R_W();
while(1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -