📄 misc-watchdog-1.c
字号:
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//--------------------------------------------
//write year
//--------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x8c;//year register
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=my_date_set.year;//0x01;//mmy_time_set.year;//0x11;//year data
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//---------------------------------------------
//write month
//---------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x88;//month register
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=my_date_set.month;//month data
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//---------------------------------------------------
//write day
//---------------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x86;//day register
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=my_date_set.day;//day data
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
}
//--------------------------------------------------------------------------------
//--------read time
//--------------------------------------------------------------------------------
static void write_rtc_time( struct my_time my_time_set )
{
int i;
unsigned char bit;
unsigned char cmd=0x05;
unsigned char read_data=0;
// struct my_time m;
//--------------------------------------------------------------------
//write write protect reg
//---------------------------------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;///set RTC_IO output
cmd=0x8e;//write protect reg
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=0x00;//=0x00 register can write ,=0x80 register can not write
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//------------------------------------------
//write second to enable osc
//------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x80;//second reg
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=0x00;//=0x00 osc is enable =0x80 osc is disable
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//----------------------------------------------
//write hour
//----------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x84;//hour register
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=my_time_set.hour;//hour data
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
udelay(20);
//--------------------------------------------------
//write min
//--------------------------------------------------
AT91_SYS->PIOB_OER|=MY_RTC_IO;
cmd=0x82;//min register
AT91_SYS->PIOB_SODR=MY_RTC_CS;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
cmd=my_time_set.min;//min data
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd>>i )&0x01;
if( bit )
AT91_SYS->PIOB_SODR=MY_RTC_IO;
else
AT91_SYS->PIOB_CODR=MY_RTC_IO;
udelay(5);
//CLK High
AT91_SYS->PIOB_SODR=MY_RTC_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOB_CODR=MY_RTC_SCK;
udelay(5);
}
udelay(20);
AT91_SYS->PIOB_CODR=MY_RTC_CS;
}
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//------------------------functions of Fram
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//----------------------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//----------write data to fm 1
//---------------------------------------------------------------------------------------------------
static void write_to_fm_1( unsigned char add1,unsigned char add2,unsigned char len,unsigned char *p )
{
int i,j;
unsigned char bit;
unsigned char cmd=0x05;
unsigned char read_data=0;
//write write-enabe command
cmd=0x06;
AT91_SYS->PIOD_SODR=FM_CS2;
AT91_SYS->PIOD_CODR=FM_CS1;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(5);
}
AT91_SYS->PIOD_SODR=FM_CS1;
udelay(20);
//write command
cmd=0x02;
AT91_SYS->PIOD_CODR=FM_CS1;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(5);
}
udelay(20);
cmd=add1;
AT91_SYS->PIOD_CODR=FM_CS1;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(5);
}
udelay(20);
cmd=add2;
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(5);
}
udelay(20);
for( j=0;j<len;j++ )
{
cmd=*p;
p++;
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(10);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(5);
}
}
AT91_SYS->PIOD_SODR=FM_CS1;
udelay(20);
}
//-------------------------------------------------------------------------------------------------------------
//-----------read data from Fram 1
//-------------------------------------------------------------------------------------------------------------
static unsigned char read_from_fm_1( unsigned char add1,unsigned char add2,unsigned char len,unsigned char *p )
{
int i,j;
unsigned char bit;
unsigned char cmd=0x05;
unsigned char read_data=0;
unsigned char read[10];
//write read command
cmd=0x03;
AT91_SYS->PIOD_SODR=FM_CS2;
AT91_SYS->PIOD_CODR=FM_CS1;
udelay(10);
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
//CLK Low
AT91_SYS->PIOC_CODR=FM_SCK;
udelay(10);
//CLK High
AT91_SYS->PIOC_SODR=FM_SCK;
udelay(5);
}
udelay(20);
cmd=add1;
for( i=0;i<=7;i++ )
{
//CMD Output
bit=( cmd<<i )&0x80;
if( bit )
AT91_SYS->PIOC_SODR=FM_SO;
else
AT91_SYS->PIOC_CODR=FM_SO;
udelay(5);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -