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

📄 main.c

📁 EMB91SAM7S64开发板(全套资料)
💻 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 + -