查看: 807|回复: 0
打印 上一主题 下一主题

读写缓冲区

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-8 08:09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
读写缓冲区
       读写缓冲区的操作也是易于理解的。需要说明的是,两个函数具有相同的输入参数,参数len代表被操作数据的长度,pdata为被操作数据的指针。和寄存器读写函数相似,发送或接收数据之前需要发送特定的操作码。
<font size="3">void enc28j60ReadBuffer(unsigned int len, unsigned char* pdata)
{
  /* 使能ENC28J60 */
  ENC28J60_CSL();
       /* 通过SPI发送读取缓冲区命令*/
       spi_sendbyte(ENC28J60_READ_BUF_MEM);
  /* 循环读取 */
       while(len)
       {
    len--;
    /* 读取数据 */
    *pdata = (unsigned char)spi_sendbyte(0);
    /* 地址指针累加 */
    pdata++;
       }
  /* 增加字符串结尾 便于操作 */
       *pdata='\0';
  /* 禁止ENC28J60 */
       ENC28J60_CSH();
}
void enc28j60WriteBuffer(unsigned int len, unsigned char* pdata)
{
  /* 使能ENC28J60 */
  ENC28J60_CSL();
       /* 通过SPI发送写取缓冲区命令*/
       spi_sendbyte(ENC28J60_WRITE_BUF_MEM);

  /* 循环发送 */
       while(len)
       {
              len--;
    /* 发送数据 */
              spi_sendbyte(*pdata);
    /* 地址指针累加 */
              pdata++;
       }

  /* 禁止ENC28J60 */
       ENC28J60_CSH();
}</font>
复制代码
3.3 读写PHY寄存器
       PHY寄存器和由ENC28J60控制的LED指示灯有关,控制这些寄存器可以控制这两个LED的驱动方式,和发生相应事件时LED的显示方式。一般情况下,一个LED指示灯常亮,显示接收和发送活动,另一个LED指示灯显示接收活动,有数据输入时产生一个点亮脉冲。PHY是比较特殊的寄存器,先要想一个控制寄存器写入PHY寄存器的地址,再向两个控制寄存器依次写入PHY寄存器的具体数据的高8位和低8位,最后等待PHY寄存器操作完成。
<font size="3">void enc28j60PhyWrite(unsigned char address, unsigned int data)
{
       /* 向MIREGADR写入地址 详见数据手册19页*/
       enc28j60Write(MIREGADR, address);
       /* 写入低8位数据 */
       enc28j60Write(MIWRL, data);
  /* 写入高8位数据 */
       enc28j60Write(MIWRH, data>>8);
       /* 等待PHY寄存器写入完成 */
       while(enc28j60Read(MISTAT) & MISTAT_BUSY);
}</font>
复制代码转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表