📄 main.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 + -