📄 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 : 31/Jan/05 JPP
//*----------------------------------------------------------------------------
// Include Standard LIB files
#include "Board.h"
#include "Main.h"
#include "lib_twi.h"
#define AT91C_EEPROM_I2C_ADDRESS (0x58<<16)
static const char POLLING_header[]={"\n\r *** ATMEL TWI ***\n\r"};
volatile char message[80];
volatile int loop;
//*--------------------------------------------------------------------------------------
//* Function Name : wait
//* Object : Software waiting loop
//* Input Parameters : none. Waiting time is defined by the global variable LedSpeed.
//* Output Parameters : none
//*--------------------------------------------------------------------------------------
void wait ( void )
{//* Begin
//Wait at least 10 ms before value is written into EEPROM
for (loop=0; loop<10000; loop++){};
}//* End
//*----------------------------------------------------------------------------
//* \fn AT91F_TestEEPROM
//* \brief test EEPROM
//*----------------------------------------------------------------------------
int AT91F_TestEEPROM(void){
char write, read,status;
//open the TWI
AT91F_TWI_Open();
write = 0x55;
// Write a byte and read it
status =AT91F_TWI_WriteByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS | AT91C_TWI_IADRSZ_2_BYTE, 0x04, &write, 1);
if (status){
sprintf((char*) message,"Write Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
// Wait 10 ms before data is written into EEPROM
wait();
status =AT91F_TWI_ReadByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS | AT91C_TWI_IADRSZ_2_BYTE, 0x04, &read, 1);
if (status){
sprintf((char*) message,"Read Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
if (read == write){
AT91F_DBGU_Printk("Test TWI OK\n\r");
return 0;
} else {
AT91F_DBGU_Printk("Error during test\n\r");
sprintf((char*) message,"Error during test write 0x%X and read 0x%X\n\r",write,read);
AT91F_DBGU_Printk((char*)message);
return -1;
}
}
//*----------------------------------------------------------------------------
//* Function Name : menu
//* Object : Usart debug menu
//* Input Parameters : None
//* Output Parameters : None
//*----------------------------------------------------------------------------
void menu( char value)
{
unsigned int address,tmp,status;
char write, read;
switch (value) {
case '0': //* infoAT91PS_TWI->TWI_CWGR
sprintf((char*) message,"AT91C_TWI_CWGR 0x%X\n\r",(unsigned int) *AT91C_TWI_CWGR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_IADR 0x%X\n\r",(unsigned int) *AT91C_TWI_IADR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_SR 0x%X\n\r",(unsigned int) *AT91C_TWI_SR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_IMR 0x%X\n\r",(unsigned int) *AT91C_TWI_IMR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_MMR 0x%X\n\r",(unsigned int) *AT91C_TWI_MMR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_THR 0x%X\n\r",(unsigned int) *AT91C_TWI_THR);
AT91F_DBGU_Printk((char*)message);
sprintf((char*) message,"AT91C_TWI_RHR 0x%X\n\r",(unsigned int) *AT91C_TWI_RHR);
AT91F_DBGU_Printk((char*)message);
break;
case '1': //* AT91C_US_ENDRX
AT91F_DBGU_Printk("Open TWI\n\r");
AT91F_TWI_Open();
break;
case '2': //*
AT91F_DBGU_Printk("Write byte at (0x0) :");
AT91F_DBGU_scanf("%x",&address);
AT91F_DBGU_Printk("\n\rWrite byte val (0x0) :");
AT91F_DBGU_scanf("%x",&tmp);
write = (char)tmp;
sprintf((char*) message,"\n\rWrite 0x%x at 0x%x \n\r",write,address);
AT91F_DBGU_Printk((char*)message);
// Write a byte
status = AT91F_TWI_WriteByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS | AT91C_TWI_IADRSZ_2_BYTE, address, &write, 1);
if (status){
sprintf((char*) message,"Write Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
break;
case '3': //*
AT91F_DBGU_Printk("\n\rWrite byte val (0x0) :");
AT91F_DBGU_scanf("%x",&tmp);
write = (char)tmp;
sprintf((char*) message,"\n\rWrite 0x%x \n\r",write);
AT91F_DBGU_Printk((char*)message);
// Write a byte
status = AT91F_TWI_WriteByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS, 0, &write, 1);
if (status){
sprintf((char*) message,"Write Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
break;
case '4': //*
AT91F_DBGU_Printk("Read byteat (0x0) :");
AT91F_DBGU_scanf("%x",&address);
status = AT91F_TWI_ReadByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS | AT91C_TWI_IADRSZ_2_BYTE,address, &read, 1);
if (status){
sprintf((char*) message,"Read Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
sprintf((char*) message,"\n\rRead 0x%X at 0x%X\n\r",read, address);
AT91F_DBGU_Printk((char*)message);
break;
case '5': //*
AT91F_DBGU_Printk("Read byteat (0x0) :");
AT91F_DBGU_scanf("%x",&address);
status = AT91F_TWI_ReadByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS ,0, &read, 1);
if (status){
sprintf((char*) message,"Read Satus = %d\n\r",status);
AT91F_DBGU_Printk((char*)message);
}
sprintf((char*) message,"\n\rRead 0x%X at 0x%X\n\r",read, address);
AT91F_DBGU_Printk((char*)message);
break;
case '6': //* Test EEPROM
AT91F_DBGU_Printk("Test EEPROM\n\r");
address = AT91F_TestEEPROM();
break;
case '7': //* Change speed
AT91F_DBGU_Printk("Write byte TWI_CWGR (0x0) :");
AT91F_DBGU_scanf("%x",&address);
sprintf((char*) message,"\n\rTWI_CWGR = 0x%X \n\r", address);
AT91F_DBGU_Printk((char*)message);
AT91C_BASE_TWI->TWI_CWGR = address;
break;
default:
AT91F_DBGU_Printk("\n\r");
break;
}
}//* End
//*----------------------------------------------------------------------------
//* Function Name : main
//* Object : Main function
//* Input Parameters : none
//* Output Parameters : TRUE
//*----------------------------------------------------------------------------
int main( void )
//* Begin
{
char value;
// First, enable the clock of the PIOB
AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
//* to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only.
AT91F_PIO_CfgOutput( AT91C_BASE_PIOA, LED_MASK ) ;
//* Clear the LED's. On the EB55 we must apply a "1" to turn off LEDs
AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED_MASK ) ;
//* Select PIN
// AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,0,AT91C_PA6_PCK0);
//* Select Main clocl / by 2
// *AT91C_PMC_PCKR = AT91C_PMC_PRES_CLK_2 | AT91C_PMC_CSS_PLL_CLK;
// Enable the PCK0
// *AT91C_PMC_SCER = AT91C_PMC_PCK0 ;
Trace_Toggel_LED(LED1);
//* Init DBGU
AT91F_DBGU_Init();
AT91F_DBGU_Printk("\n\n\r======================================");
AT91F_DBGU_Printk("\n\rEBDSAM7S64 TWI EEPREOM Test\n\r");
AT91F_DBGU_Printk("======================================\n\r");
//* Polling
AT91F_DBGU_Printk((char*)POLLING_header);
AT91F_DBGU_Printk("0)Info\n\r1)Open TWI\n\r2)Write byte EEPROML\n\r3)Write byte (IADRSZ=0)\n\r4)Read Byte EEPROM\n\r5)Read Byte (IADRSZ=0)\n\r6)EEPROM\n\r");
//* Infinit loop
while(1)
{
if (AT91F_DBGU_Get(&value) == 0 ) menu(value);
}// End while
}//* End
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -