- 帖子
- 120
- 主题
- 79
- 精华
- 0
- 积分
- 60
- 在线时间
- 5 小时
- 注册时间
- 2010-10-13
|
- /***************************************************************
- * X25043/45 application ; Procedures
- * absolute one address access
- ***************************************************************
- WARNING: The function with '_' ahead ,user may not use it.as it
- used internal
- */
- //使用函数:write_status(status) 写状态,一般写0
- //clr_wchdog(void) 清看门狗
- //unsigned char read_byte(address) //读一个字节
- //void write_byte(address,Data) //写一个字节
-
- #define ALONE_COMPILE
- #ifdef ALONE_COMPILE
- #include "INTRINS.H"
- #endif
- #ifndef nop2()
- #define nop2() _nop_();_nop_();_nop_()
- #endif
- #define WREN 0x06
- #define WRDI 0x04
- #define RDSR 0x05
- #define WRSR 0x01
- #define READ 0x03
- #define WRITE 0x02
- //#define PORT P1
- sfr PORT=0x90; //25045的4根io脚接在同一端口,本例为p1
- //请根据实际电路更改引脚定义
- #define _SI 0x80 //si接在p1.3,0x80=00001000b
- #define _SCK 0x40 //sck接在p1.2,0x80=00000100b
- #define _SO 0x20 //so接在p1.1
- #define _CS 0x10 //cs接在p1.0
- //----------------------------------------------------------------
- #ifndef dword
- #define dword unsigned long
- #define word unsigned int
- #define byte unsigned char
- typedef union{
- word w;
- byte bh;
- byte bl;
- }WordType;
- typedef union{
- dword dw;
- word w[2];
- byte b[4];
- }DwordType;
- #endif
- //----------------------------------------------------------------
- void _w_byte(Data)
- char Data;
- {
- char i;
- PORT &= (_SCK^0xff);
- for(i=0;i<8;i++)
- {
- nop2();nop2();/////////////
- if(Data & 0x80) PORT |= _SI;
- else PORT &= (_SI^0xff);
- nop2();nop2();/////////////
- PORT |=_SCK;
- nop2();nop2();/////////////
- Data=Data<<1;
- nop2();nop2();/////////////
- PORT &= (_SCK^0xff);
- nop2();nop2();/////////////
- }
- }
- //----------------------------------------------------------------
- char _r_byte(void)
- {
- char i;
- char result;
- result=0;
- for(i=0;i<8;i++)
- {
- nop2();nop2();/////////////
- PORT |=_SCK;
- result=result<<1;
- nop2();nop2();/////////////
- if((PORT & _SO) != 0)
- result |= 0x01;
- nop2();nop2();/////////////
- PORT &=(_SCK^0xff);
- nop2();nop2();/////////////
- }
- return(result);
- }
- //----------------------------------------------------------------
- void write_status(status)
- char status;
- {
- PORT &=(_CS^0xff);
- nop2();nop2();/////////////
- _w_byte(status);
- PORT |=_CS;
- nop2();nop2();/////////////
- return;
- }
- //----------------------------------------------------------------
- void clr_wchdog(void)
- {
- PORT &= (_CS^0xff);
- PORT |=_CS;
- }
- //----------------------------------------------------------------
- void wait_free(void)
- {
- unsigned int t;
- t=3000;
- while(--t);
- }
- //----------------------------------------------------------------
- void write_reg(_code)
- char _code;
- {
- write_status(WREN);
- PORT &= (_CS^0xff);
- nop2();nop2();/////////////
- _w_byte(WRSR);
- _w_byte(_code);
- nop2();nop2();/////////////
- PORT |=_CS;
- wait_free();
- }
- //----------------------------------------------------------------
- unsigned char read_byte(address)
- unsigned int address;
- {
- char result;
- PORT &=(_CS^0xff); // Chip select
- nop2();nop2();/////////////
- _w_byte((char)(address>255 ? (0x08|READ): READ));
- _w_byte((char)(address & 0x00ff));
- result=_r_byte();
- nop2();nop2();/////////////
- PORT |=_CS;
- // Chip unselect
- return(result);
- }
- //----------------------------------------------------------------
- void write_byte(address,Data)
- unsigned int address;
- char Data;
- {
- write_status(WREN);
- nop2();nop2();/////////////
- PORT &= (_CS^0xff);
- nop2();nop2();/////////////
- _w_byte((unsigned char)(address>255 ? (0x08|WRITE): WRITE));
- _w_byte((unsigned char)(address & 0x00ff));
- _w_byte(Data);
- nop2();nop2();/////////////
- PORT |=_CS;
- wait_free();
- return;
- }
- /*
- //----------------------------------------------------------------
- unsigned long read_data(format,address)
- unsigned char format;
- unsigned int address;
- {
- DwordType result;
- switch(format&0xdf)
- {
- case 'L':
- result.b[0]=read_byte(address);
- result.b[1]=read_byte(address+1);
- result.b[2]=read_byte(address+2);
- result.b[3]=read_byte(address+3);
- break;
- case 'D':
- result.b[2]=read_byte(address);
- result.b[3]=read_byte(address+1);
- break;
- case 'C':
- result.b[3]=read_byte(address);
- break;
- }
- return(result.dw);
- }
- //----------------------------------------------------------------
- void write_data(format,address,Data)
- unsigned char format;
- unsigned int address;
- DwordType data* Data;
- {
- switch(format&0xdf)
- {
- case 'L':
- write_byte(address , Data->b[0]);
- write_byte(address+1, Data->b[1]);
- write_byte(address+2, Data->b[2]);
- write_byte(address+3, Data->b[3]);
- break;
- case 'D':
- write_byte(address , Data->b[2]);
- write_byte(address+1, Data->b[3]);
- break;
- case 'C':
- write_byte(address , Data->b[3]);
- break;
- }
- }
- //----------------------------------------------------------------
- */
复制代码 |
|