导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→x25045的读写函数

* 3746: 硬件:X25045管脚说明

   寄存器 
寄存器发表的帖子 

 x25045的读写函数
 #pragma registerbank(0)
#define wp_addr    0xff /* wp address in fpga, 0xff=none */
//sbit WP   = P1 ^ 5;
sbit SCLK = P1 ^ 3;
sbit SDI  = P1 ^ 2;
sbit SDO  = P1 ^ 1;
sbit SCS  = P1 ^ 0;
/*-------------------------------------------------------------------*/
#ifndef XBYTE
#define XBYTE ((unsigned char volatile *)0x20000L)
#endif
#define uchar unsigned char

#define wren_inst  6    /* write enable latch instruction (wren) */
#define wrdi_inst  4    /* write disable latch instruction (wrdi) */
#define wrsr_inst  1    /* write status register instruction (wrsr) */
#define rdsr_inst  5    /* read status register instruction (rdsr) */
#define write_inst 2    /* write memory instruction (write) */
#define read_inst  3    /* read  memory instruction (read) */
#define status_reg 0    /* status register, watch dog timeout=1.4s, 
protected array=no */

/********************************************************************/
/* read/write 25165 subroutines, 02/16-2000 by hhl */

void outbyte( uchar c)
{
    uchar i;
    for (i = 0; i   < 8;i++)
    {
        SCLK = 0;
        SDI = c & 0X80;
        c   <  <= 1;
        SCLK = 1;
    }
    SDI = 0;
}

uchar inbyte(void)
{
    uchar i,c;
    c = 0;
    for (i = 0; i   <8 ;i++)
     {
        SCLK = 1;
        SCLK = 0;
        c   <  <= 1;
        c |= SDO;
     }
    return c;
}

void wren_cmd(void)
{
    SCLK = 0;
    SCS = 0;
    outbyte(wren_inst);
    SCLK = 0;
    SCS = 1;
}

uchar rdsr_cmd(void)
{
    uchar c;

    SCLK = 0;
    SCS = 0;
    outbyte(rdsr_inst);
    c = inbyte();
    SCLK = 0;
    SCS = 1;
    return c;
}

void init_x25165(void)
  {
    #if wp_addr !=0xff
        XBYTE[wp_addr]=1;     /* x25045 /wp high */
    #endif
    wren_cmd();               /* x25045 write enable */
    SCLK = 0;
    SCS = 0;
    outbyte(wrsr_inst);
    outbyte(status_reg);
    SCLK = 0;
    SCS = 1;
    while ((rdsr_cmd() & 0X01) == 1);
    #if wp_addr !=0xff
        XBYTE[wp_addr]=0;         /* x25045 /wp low */
    #endif
  }


/*===================================================================
读 X25165 中数据放入外部RAM中
入口:X25165地址:dog_add,外部RAM地址:add,要读的字节数:len
===================================================================*/
void rdata( unsigned int dog_add, unsigned int add,  unsigned int len)
{
    uchar c = read_inst;
    unsigned int j;

    SCLK = 0;
    SCS = 0;
    outbyte(c);
    outbyte(dog_add>  >  8);
    outbyte(dog_add);
    for (j = 0;j   < len; j++)
       {
          c = inbyte();
          XBYTE[0xfff6]=add>  >  8;
          XBYTE[0xfff7]=add;
          XBYTE[0xfff8]=c;
          add++;
       }
    SCLK =0;
    SCS = 1;
}

/*===================================================================
将外部RAM中数据写入 X25165 中
入口:X25165地址:dog_add,外部RAM地址:add,要写的字节数:len
===================================================================*/
void sdata( unsigned int dog_add, unsigned int add,  unsigned int len)
  {
    unsigned char c;
    unsigned int j;
    unsigned int B_TEMP = dog_add;

    #if wp_addr !=0xff
        XBYTE[wp_addr]=1;         /* x25045 /wp high */
    #endif

    for (j = 0;j != len; j++)
      {
        wren_cmd();               /* x25045 write enable */
        SCLK = 0;
        SCS = 0;
        c = write_inst;
        outbyte(c);
        outbyte(B_TEMP>  >  8);
        outbyte(B_TEMP);
        
        XBYTE[0xfff6]=add>  >  8;
        XBYTE[0xfff7]=add;
        c=XBYTE[0xfff3];        /* 读 RAM 中的数据 */
        outbyte(c);
        SCLK =0;
        SCS = 1;
        B_TEMP++;
        add++;
        while ((rdsr_cmd() & 0X01) == 1);   /* wait for write finish */
      }

    #if wp_addr !=0xff
        XBYTE[wp_addr]=0;         /* x25045 /wp low */
    #endif
  }

void rst_wdog(void)
  {
    SCS = 0;
    SCS = 1;
  }
/****************************************************************/


发表时间:2001年12月20日8:56:00

  
回复该帖

本主题共有 3 帖,分页:>>>>>该主题的所有内容[3]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

  3779.[详细]x25045的程序
摘要:......(无内容)
- [寄存器][1095次] 2001年12月20日

[上一篇帖子]:老古的下载特区不是有大把的吗?
[下一篇帖子]:初学者:老古请问 74ls471 28l22用什么读写? 哪有资料下载