?? main.c
字號:
/*********************************************************************************************
* File: adc.c
* Author: Embest z.j.zheng
* Desc: test adc function,super terminal get the digital converted from adc through the uart
* History:
*********************************************************************************************/
/*------------------------------------------------------------------------------------------*/
/* include files */
/*------------------------------------------------------------------------------------------*/
#include "Board.h"
#include "dbgu.h"
#include "all_init.h"
/*------------------------------------------------------------------------------------------*/
/* Global variable */
/*------------------------------------------------------------------------------------------*/
char data_out[16];
volatile char message[80];
/* Digit Symbol table*/
char Symbol[] = { DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7,
DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F};
/* LED segment table */
int Seg[] = { SEGMENT_A, SEGMENT_B, SEGMENT_C, SEGMENT_D, SEGMENT_E, SEGMENT_F, SEGMENT_G, SEGMENT_P};
const int led_sw[6]= {LED1, LED2, LED3,LED3, LED2, LED1};
/*********************************************************************************************
* name: spi_send
* func: spi bus send byte
* para: chr --in, send value
* ret: none
* modify:
* comment:
*********************************************************************************************/
void spi_send(char chr)
{
AT91F_SPI_PutChar(AT91C_BASE_SPI,chr,0); // send a byte
}
/*********************************************************************************************
* name: time_dly
* func: display code
* para: dly --in, delay value
* ret: none
* modify:
* comment:
*********************************************************************************************/
void time_dly(int dly)
{
int i;
for(; dly>0; dly--)
for(i=0; i<500; i++);
}
/*********************************************************************************************
* name: twi_write
* func: write the data to the eeprom by the twi
* para: pointer. pointer to the array
* ret: none
* modify:
* comment:
*********************************************************************************************/
void twi_write( AT91PS_TWI pTWI,int Numn)
{
AT91C_BASE_TWI->TWI_CWGR = 0x40f0f;
pTWI->TWI_CR = AT91C_TWI_MSEN;
pTWI->TWI_MMR = (AT91C_TWI_IADRSZ_1_BYTE | (!AT91C_TWI_MREAD) | AT91C_TWI_DADR);
pTWI->TWI_IADR = 0x0 + Numn; //INTERNAL ADDRESS
pTWI->TWI_THR =Numn;
pTWI->TWI_CR = AT91C_TWI_START; //start
while(pTWI->TWI_SR&0x4==0 ){};
time_dly(100);
pTWI->TWI_CR = AT91C_TWI_STOP ; //stop
while(pTWI->TWI_SR&0x1==0){};
}
/*********************************************************************************************
* name: twi_read
* func: read the data from the eeprom by the twi
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void twi_read(AT91PS_TWI pTWI,int n)
{
AT91C_BASE_TWI->TWI_CWGR = 0x40f0f;
AT91C_BASE_TWI->TWI_CR = AT91C_TWI_MSEN | AT91C_TWI_SVDIS;
pTWI->TWI_MMR = (AT91C_TWI_IADRSZ_1_BYTE | AT91C_TWI_MREAD | AT91C_TWI_DADR);
pTWI->TWI_IADR = 0x0+n; //INTERNAL ADDRESS
pTWI->TWI_CR |= AT91C_TWI_START; //start
while((pTWI->TWI_SR & 0x2) == 0 ){};
data_out[n] = pTWI->TWI_RHR;
time_dly(100);
pTWI->TWI_CR |= AT91C_TWI_STOP; //stop
while((pTWI->TWI_SR & 0x1) == 0){};
}
/*********************************************************************************************
* name: menu
* func: Usart debug menu
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
void menu( char value)
{
unsigned int i,j,button_ID,timer0;
char AD_Data,AD[2];
switch (value) {
case '1': // leds test
AT91F_DBGU_Printk("pio output function test.\n\rlook at the leds(Input 0 to quit)..\n\r");
// led3 is multipex with TWD
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED3 ) ;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3 ) ;
do
{
timer0++;
if(timer0 > 0x60000)
timer0 = 0;
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1|LED2|LED3) ;
AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, led_sw[timer0>>16] ) ;
AT91F_DBGU_Get(&value);
}while(value != '0');
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1|LED2|LED3) ;
break;
case '2': // spi test
AT91F_DBGU_Printk("spi function test.\n\rlook at the 8 segment digital ..\n\r");
AT91F_SPI_Enable(AT91C_BASE_SPI);
for(i=0;i<16;i++)
{
spi_send(~Symbol[i]); // 8 segment digital display number from 0 to f
time_dly(500);
}
spi_send(~Symbol[0]);
time_dly(500);
AT91F_SPI_Disable(AT91C_BASE_SPI);
break;
case '3': // pwm test
AT91F_DBGU_Printk("pwm function test.\n\rlisten to the beep ..\n\r");
AT91F_PWMC_StartChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0);
time_dly(10000);
AT91F_PWMC_StopChannel(AT91C_BASE_PWMC,AT91C_PWMC_CHID0);
break;
case '4': // adc test
AT91F_DBGU_Printk("adc function test.\n\r");
AT91F_ADC_EnableChannel(AT91C_BASE_ADC,AT91C_ADC_CH4);
AT91F_ADC_StartConversion(AT91C_BASE_ADC);
for(j=500;j>0;j--);
AD_Data=AT91F_ADC_GetConvertedDataCH4(AT91C_BASE_ADC);
AT91F_DBGU_Printk("the current digital output of ADC is: 0x");
j=AD_Data;
j=(j&0xf0)>>4;
if ((j>=0)&(j<=9))
AD[0]=0x30+j;
else AD[0]=0x41+j-10;
j=AD_Data;
j=j&0x0f;
if ((j>=0)&(j<=9))
AD[1]=0x30+j;
else AD[1]=0x41+j-10;
AD[2]='\0';
AT91F_DBGU_Printk(AD);
AT91F_DBGU_Printk( "\n\r" );
break;
case '5': // button test
AT91F_DBGU_Printk("PIO input function test.\n\r");
AT91F_DBGU_Printk("push down any button you want(Input 0 to quit)..\n\r");
do
{
j = AT91F_PIO_GetInput(AT91C_BASE_PIOA);
button_ID = j&SW_MASK;
if ((button_ID&SW1_MASK) == 0)AT91F_DBGU_Printk("\rthe current pushed down button is NO.1 ");
else if ((button_ID&SW2_MASK) == 0)AT91F_DBGU_Printk("\rthe current pushed down button is NO.2 ");
else if ((button_ID&SW3_MASK) == 0)AT91F_DBGU_Printk("\rthe current pushed down button is NO.3 ");
else if ((button_ID&SW4_MASK) == 0)AT91F_DBGU_Printk("\rthe current pushed down button is NO.4 ");
AT91F_DBGU_Get(&value);
}while( value != '0' );
AT91F_DBGU_Printk( "\n\r" );
break;
case '6': // twi test
AT91F_DBGU_Printk("twi function test\n\r");
AT91F_DBGU_Printk("Write char 0-f into AT24C02\n\r");
// Configure PIO controllers to periph mode, in open drain
AT91F_TWI_CfgPIO(); // TWD(PA3) is a multiplex with LED3
AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,AT91C_PA3_TWD );
for(i = 0; i <= 15; i++)
{
twi_write(AT91C_BASE_TWI,i); // write the i number into the at24c02
twi_read(AT91C_BASE_TWI,i); // read the i number out from the at24c02
}
for(i = 0; i < 10; i++) // change into ASCII
data_out[i] += '0';
for(i = 10; i < 16; i++)
data_out[i] += 'a'-10;
data_out[16] = '\0';
AT91F_DBGU_Printk("Read out 16 bytes from AT24C02\n\r");
AT91F_DBGU_Printk(data_out);
break;
default:
AT91F_DBGU_Printk("\n\r");
break;
}
}
/*********************************************************************************************
* name: main
* func: Main function
* para: none
* ret: none
* modify:
* comment:
*********************************************************************************************/
Main( void )
{
char value;
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
SPI_Init();
adc_Init();
twi_Init();
led_Init();
button_Init();
pwm_Init();
AT91F_DBGU_Init(); // Init DBGU
AT91F_DBGU_Printk("ATEBSAM7S boards part functions test.--version 050300\n\r");
AT91F_DBGU_Printk("1)leds test\n\r2)spi test\n\r3)pwm test\n\r4)adc test\n\r5)button test\n\r6)twi test\n\r");
while(1)
{
if (AT91F_DBGU_Get(&value) == 0 ) menu(value);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -