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

📄 main.c

📁 atmel ARM7单片机at91sam7x256软件中断实验程序
💻 C
字号:

/**************************************************************************************************
*
* Copyright (C) ART Limited, 2006. All rights reserved.
* 
* File:          main.c
* Programmed by: allan
* Data:          2006.12.18
* 
**************************************************************************************************/

// Include Standard LIB  files
#include "project.h"

#define AT91C_EEPROM_I2C_ADDRESS  	(0x50<<16)

//*----------------------------------------------------------------------------
//* Function Name       : delay
//* Object              : Wait
//* Input Parameters    : none
//* Output Parameters   : none
//* Functions called    : none
//*----------------------------------------------------------------------------
void delay ( void )
{
//* Set in Volatile for Optimisation
    volatile unsigned int    i ;
//* loop delay
    for ( i = 0 ;(i < WAIT_TIME/100 );i++ ) ;
}

//*----------------------------------------------------------------------------
//* Function Name       : DelayNS
//* Object              : software delay times
//* Input Parameters    : unsigned int dly
//* Output Parameters   : none
//* Functions called    : none
//*---------------------------------------------------------------------------
void DelayNS(unsigned int dly)
{
	unsigned int i;
	for(; dly>0; dly--) 
		for(i=0; i<0x1000; i++);
}

//*----------------------------------------------------------------------------
//* Function Name       : Usart_init
//* Object              : init Usart
//* Input Parameters    : none
//* Output Parameters   : none
//* Functions called    : void Init_DBGU( void )
//*                       void Init_Uart0( void )
//*---------------------------------------------------------------------------
void  Usart_init( void )
{
    //DBGU init
    Init_DBGU( );
    //* USART0 init
    Init_Uart0();    

}


//*----------------------------------------------------------------------------
//* Function Name       : menu
//* Object              : show system Info
//* Input Parameters    : value
//* Output Parameters   : none
//*----------------------------------------------------------------------------
void menu( char value)
{
	unsigned int address,tmp,status;
	char write, read;

	switch (value) {

	case '0': // info
		  AT91F_DBGU_Printf("AT91C_TWI_CWGR 0x%X\n\r",(unsigned int) *AT91C_TWI_CWGR);
		  AT91F_DBGU_Printf("AT91C_TWI_IADR 0x%X\n\r",(unsigned int) *AT91C_TWI_IADR);
		  AT91F_DBGU_Printf("AT91C_TWI_SR   0x%X\n\r",(unsigned int) *AT91C_TWI_SR);
		  AT91F_DBGU_Printf("AT91C_TWI_IMR  0x%X\n\r",(unsigned int) *AT91C_TWI_IMR);
		  AT91F_DBGU_Printf("AT91C_TWI_MMR  0x%X\n\r",(unsigned int) *AT91C_TWI_MMR);
		  AT91F_DBGU_Printf("AT91C_TWI_THR  0x%X\n\r",(unsigned int) *AT91C_TWI_THR);
		  AT91F_DBGU_Printf("AT91C_TWI_RHR  0x%X\n\r",(unsigned int) *AT91C_TWI_RHR);
	break;

	case '1':
         AT91F_DBGU_Printk("Open TWI\n\r");
         AT91F_TWI_Open();
	break;

	case '2': // Write byte EEPROML
          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;
 	      AT91F_DBGU_Printf("\n\rWrite 0x%x at 0x%x \n\r",write,address);
       	  // Write a byte
          status = AT91F_TWI_WriteByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS | AT91C_TWI_IADRSZ_2_BYTE, address, &write, 1);
          if (status)
            {
		        AT91F_DBGU_Printf("Write Satus = %d\n\r",status);
		    }
    break;
        
	case '3':// Write byte (IADRSZ=0)
          AT91F_DBGU_Printk("\n\rWrite byte val (0x0) :");
          AT91F_DBGU_scanf("%x",&tmp);
          write = (char)tmp;
 	      AT91F_DBGU_Printf("\n\rWrite 0x%x \n\r",write);
          status = AT91F_TWI_WriteByte(AT91C_BASE_TWI, AT91C_EEPROM_I2C_ADDRESS, 0, &write, 1);
	      if (status)
	        {
		         AT91F_DBGU_Printf("Write Satus = %d\n\r",status);
		
            }
    break;
        
	case '4': // Read Byte EEPROM
          AT91F_DBGU_Printk("Read byte at (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)
            {
		         AT91F_DBGU_Printf("Read Satus = %d\n\r",status);
            }
          AT91F_DBGU_Printf("\n\rRead 0x%X at 0x%X\n\r",read, address);
    break;

    case '5': // Read Byte (IADRSZ=0)
          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)
            {
		         AT91F_DBGU_Printf("Read Satus = %d\n\r",status);
            }
         AT91F_DBGU_Printf("\n\rRead 0x%X at 0x%X\n\r",read, address);
	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);
          AT91F_DBGU_Printf("\n\rTWI_CWGR = 0x%X \n\r", address);
          AT91C_BASE_TWI->TWI_CWGR = address;
    break;
         
	default:
		AT91F_DBGU_Printk("\n\r");
    break;
    
	}
}

//*----------------------------------------------------------------------------
//* Function Name       : main
//* Object              : Software entry point
//* Input Parameters    : none
//* Output Parameters   : none
//*----------------------------------------------------------------------------
Int32 main(void)
{
    char           value;
    AT91PS_AIC     pAic;

    //* Load System pAic Base address
    pAic = AT91C_BASE_AIC;    
  
    //* Enable User Reset and set its minimal assertion to 960 us
	AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (0xA5000000);
   	//* First, enable the clock of the PIOA
   	AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;	

    Usart_init( );
    //* Display general purpose infos
    AT91F_DBGU_Printf("\n\n\r-I--AT91SAM7X256 TWI Test--I-\n\r");
    AT91F_DBGU_Printf("\n\r-I--Select Menu--I-\n\n\r");    
    
  
    AT91F_DBGU_Printf("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)TEST EEPROM\n\r7)Change speed\n\r\n\r");  
  
    while(1)  
      {	
           if (AT91F_DBGU_Get((&value)) == 0 ) menu(value);    // 查询菜单输入
      }
    
    return 1;
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -