读写缓冲区
读写缓冲区的操作也是易于理解的。需要说明的是,两个函数具有相同的输入参数,参数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>
复制代码转载
|