当前位置: 首页 > news >正文

做一斗地主网站多少钱群晖nas可以做网站服务器

做一斗地主网站多少钱,群晖nas可以做网站服务器,兰州市住房和城乡建设局网站,医疗网站的运营1、背景介绍 模块上有9个PHY#xff0c;其中两个PHY通过ZYNQ PS端的MDIO总线连接#xff0c;其余7个PHY单独通过GPIO进行控制#xff0c;需要实现GPIO模拟MDC/MDIO协议。 2、vivado工程设计 vivado工程内为每个PHY建立两个GPIO IP核#xff0c;分别用来代表MDC和MDIO其中两个PHY通过ZYNQ PS端的MDIO总线连接其余7个PHY单独通过GPIO进行控制需要实现GPIO模拟MDC/MDIO协议。 2、vivado工程设计 vivado工程内为每个PHY建立两个GPIO IP核分别用来代表MDC和MDIO虽然有点浪费 MDC配置为默认输出 MDIO配置为双向 MDIO管脚默认上拉 3、MDIO时序介绍 MDIO接口包括两条线MDIO和MDC其中MDIO是双向数据线而MDC是由STA驱动的时钟线。MDC时钟的最高速率一般为2.5MHzMDC也可以是非固定频率甚至可以是非周期的。MDIO接口只是会在MDC时钟的上升沿进行采样而并不在意MDC时钟的频率类似于I2C接口。MDIO是一个PHY的管理接口用来读/写PHY的寄存器以控制PHY的行为或获取PHY的状态MDC为MDIO提供时钟。 PreambleStart32bits的前导码以及2bit的开始位。 OP Code2bits的操作码10表示读01表示写。 PHYAD5bits的PHY地址一般PHY地址从0开始顺序编号例如6口switch中PHY地址为0-5。 REGAD5bits的寄存器地址即要读或写的寄存器。 Turn Around2bits的TA在读命令中MDIO在此时由MAC驱动改为PHY驱动并等待一个时钟周期准备发送数据。在写命令中不需要MDIO方向发生变化则只是等待两个时钟周期准备写入数据。 Data16bits数据在读命令中PHY芯片将读到的对应PHYAD的REGAD寄存器的数据写到Data中在写命令中MAC将要写入对应PHYAD的REGAD寄存器的值写入Data中。 Idle空闲状态此时MDIO无源驱动处高阻状态但一般用上拉电阻使其处在高电平上拉电阻一般为1.5K。空闲电平是低电平 逻辑分析上抓到的示意图如下 4、应用程序设计 参考上面的时序采用GPIO翻转实现注意AXI GPIO IP核0x4写0为输出写1为输入主要是用来操作MDIO方向 代码如下 /** Copyright (c) 2012 Xilinx, Inc. All rights reserved.** Xilinx, Inc.* XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION AS IS AS A* COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS* ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR* STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION* IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE* FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION.* XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO* THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO* ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE* FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY* AND FITNESS FOR A PARTICULAR PURPOSE.**/#include stdio.h #include stdlib.h #include string.h #include linux/mii.h #include sys/types.h #include sys/socket.h #include sys/ioctl.h #include net/if.h #include linux/sockios.h #include linux/types.h #include netinet/in.h #include unistd.h #include xil_io.h#define PHY2_YT8521_ADDR 0x01 #define PHY3_YT8521_ADDR 0x02 #define PHY5_YT8521_ADDR 0x04 #define PHY6_YT8521_ADDR 0x05 #define PHY7_YT8521_ADDR 0x06 #define PHY8_YT8521_ADDR 0x07 #define PHY9_YT8521_ADDR 0x00#define PHY_YT8521_ID_REG_ADDR 0x03 #define PHY_YT8521_REG_DEBUG_ADDR_OFFSET 0x1E #define PHY_YT8521_REG_DEBUG_DATA 0x1F #define PHY_YT8521_EXT_REG_ADDR 0xa00d#define MDC2_GPIO_ADDR 0x412B0000 #define MDC3_GPIO_ADDR 0x412D0000 #define MDC5_GPIO_ADDR 0x412F0000 #define MDC6_GPIO_ADDR 0x41310000 #define MDC7_GPIO_ADDR 0x41330000 #define MDC8_GPIO_ADDR 0x41350000 #define MDC9_GPIO_ADDR 0x41370000#define MDIO2_GPIO_ADDR 0x412C0000 #define MDIO3_GPIO_ADDR 0x412E0000 #define MDIO5_GPIO_ADDR 0x41300000 #define MDIO6_GPIO_ADDR 0x41320000 #define MDIO7_GPIO_ADDR 0x41340000 #define MDIO8_GPIO_ADDR 0x41360000 #define MDIO9_GPIO_ADDR 0x41380000#define PHY2_SOFT_SMI_MDIO_READ Xil_In32(MDIO2_GPIO_ADDR) #define PHY3_SOFT_SMI_MDIO_READ Xil_In32(MDIO3_GPIO_ADDR) #define PHY5_SOFT_SMI_MDIO_READ Xil_In32(MDIO5_GPIO_ADDR) #define PHY6_SOFT_SMI_MDIO_READ Xil_In32(MDIO6_GPIO_ADDR) #define PHY7_SOFT_SMI_MDIO_READ Xil_In32(MDIO7_GPIO_ADDR) #define PHY8_SOFT_SMI_MDIO_READ Xil_In32(MDIO8_GPIO_ADDR) #define PHY9_SOFT_SMI_MDIO_READ Xil_In32(MDIO9_GPIO_ADDR)typedef unsigned char u8; typedef unsigned short u16;void mdio_out(int index) {switch(index){case 2:Xil_Out32(MDIO2_GPIO_ADDR0x4,0x0);break;case 3:Xil_Out32(MDIO3_GPIO_ADDR0x4,0x0);break;case 5:Xil_Out32(MDIO5_GPIO_ADDR0x4,0x0);break;case 6:Xil_Out32(MDIO6_GPIO_ADDR0x4,0x0);break;case 7:Xil_Out32(MDIO7_GPIO_ADDR0x4,0x0);break;case 8:Xil_Out32(MDIO8_GPIO_ADDR0x4,0x0);break;case 9:Xil_Out32(MDIO9_GPIO_ADDR0x4,0x0);break;default:break;}}void mdio_in(int index) {switch(index){case 2:Xil_Out32(MDIO2_GPIO_ADDR0x4,0x1);break;case 3:Xil_Out32(MDIO3_GPIO_ADDR0x4,0x1);break;case 5:Xil_Out32(MDIO5_GPIO_ADDR0x4,0x1);break;case 6:Xil_Out32(MDIO6_GPIO_ADDR0x4,0x1);break;case 7:Xil_Out32(MDIO7_GPIO_ADDR0x4,0x1);break;case 8:Xil_Out32(MDIO8_GPIO_ADDR0x4,0x1);break;case 9:Xil_Out32(MDIO9_GPIO_ADDR0x4,0x1);break;default:break;}}void mdc_low(int index) {switch(index){case 2:Xil_Out32(MDC2_GPIO_ADDR,0x0);break;case 3:Xil_Out32(MDC3_GPIO_ADDR,0x0);break;case 5:Xil_Out32(MDC5_GPIO_ADDR,0x0);break;case 6:Xil_Out32(MDC6_GPIO_ADDR,0x0);break;case 7:Xil_Out32(MDC7_GPIO_ADDR,0x0);break;case 8:Xil_Out32(MDC8_GPIO_ADDR,0x0);break;case 9:Xil_Out32(MDC9_GPIO_ADDR,0x0);break;default:break;}}void mdc_high(int index) {switch(index){case 2:Xil_Out32(MDC2_GPIO_ADDR,0xffffffff);break;case 3:Xil_Out32(MDC3_GPIO_ADDR,0xffffffff);break;case 5:Xil_Out32(MDC5_GPIO_ADDR,0xffffffff);break;case 6:Xil_Out32(MDC6_GPIO_ADDR,0xffffffff);break;case 7:Xil_Out32(MDC7_GPIO_ADDR,0xffffffff);break;case 8:Xil_Out32(MDC8_GPIO_ADDR,0xffffffff);break;case 9:Xil_Out32(MDC9_GPIO_ADDR,0xffffffff);break;default:break;}}void mdio_low(int index) {switch(index){case 2:Xil_Out32(MDIO2_GPIO_ADDR,0x0);break;case 3:Xil_Out32(MDIO3_GPIO_ADDR,0x0);break;case 5:Xil_Out32(MDIO5_GPIO_ADDR,0x0);break;case 6:Xil_Out32(MDIO6_GPIO_ADDR,0x0);break;case 7:Xil_Out32(MDIO7_GPIO_ADDR,0x0);break;case 8:Xil_Out32(MDIO8_GPIO_ADDR,0x0);break;case 9:Xil_Out32(MDIO9_GPIO_ADDR,0x0);break;default:break;}}void mdio_high(int index) {switch(index){case 2:Xil_Out32(MDIO2_GPIO_ADDR,0xffffffff);break;case 3:Xil_Out32(MDIO3_GPIO_ADDR,0xffffffff);break;case 5:Xil_Out32(MDIO5_GPIO_ADDR,0xffffffff);break;case 6:Xil_Out32(MDIO6_GPIO_ADDR,0xffffffff);break;case 7:Xil_Out32(MDIO7_GPIO_ADDR,0xffffffff);break;case 8:Xil_Out32(MDIO8_GPIO_ADDR,0xffffffff);break;case 9:Xil_Out32(MDIO9_GPIO_ADDR,0xffffffff);break;default:break;}}void Mcu_Yt8521_Soft_Smi_Bit_Set(int index,u8 bit) {// set mdio dir out// set mdiomdio_out(index);if(bit) mdio_high(index);else mdio_low(index);// set clk.mdc_low(index);mdc_high(index); }void Mcu_Yt8521_Soft_Smi_Bit_Get(int index,u8 *bit) {// set mdio dir in// get mdiomdio_in(index); //MDIO线设置为输入switch(index){case 2:*bit !!PHY2_SOFT_SMI_MDIO_READ;break;case 3:*bit !!PHY3_SOFT_SMI_MDIO_READ;break;case 5:*bit !!PHY5_SOFT_SMI_MDIO_READ;break;case 6:*bit !!PHY6_SOFT_SMI_MDIO_READ;break;case 7:*bit !!PHY7_SOFT_SMI_MDIO_READ;break;case 8:*bit !!PHY8_SOFT_SMI_MDIO_READ;break;case 9:*bit !!PHY9_SOFT_SMI_MDIO_READ;break;default:break;}// set clk.mdc_low(index);mdc_high(index);}u16 Srv_Yt8521_Soft_I2c_Device_Write(int index,u8 phy_addr, u8 reg_addr, u16 data) {u16 i 0;//idelfor(i 0; i 32; i){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}//startMcu_Yt8521_Soft_Smi_Bit_Set(index,0);Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);//op codeMcu_Yt8521_Soft_Smi_Bit_Set(index,0);Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);//phy addressfor(i 0; i 5; i){if( phy_addr (0x10 i) ){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}else{Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);}}//register addressfor(i 0; i 5; i){if( reg_addr (0x10 i) ){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}else{Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);}}//TA翻转状态ackMcu_Yt8521_Soft_Smi_Bit_Set(index,1);Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);//register datafor(i 0; i 16; i){if( data (0x8000 i) ){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}else{Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);}}return 0; }u16 Srv_Yt8521_Soft_I2c_Device_Read(int index,u8 phy_addr, u8 reg_addr) {u16 i 0;u16 data 0; //待获取的数据u8 bit 0;//idelfor(i 0; i 32; i){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}//startMcu_Yt8521_Soft_Smi_Bit_Set(index,0);Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);//op codeMcu_Yt8521_Soft_Smi_Bit_Set(index,1);Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);//phy addressfor(i 0; i 5; i){if( phy_addr (0x10 i) ){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}else{Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);}}//register addressfor(i 0; i 5; i){if( reg_addr (0x10 i) ){Mcu_Yt8521_Soft_Smi_Bit_Set(index,1);}else{Mcu_Yt8521_Soft_Smi_Bit_Set(index,0);}}//TA翻转状态ackMcu_Yt8521_Soft_Smi_Bit_Get(index,bit);Mcu_Yt8521_Soft_Smi_Bit_Get(index,bit);//register datafor(i 0; i 16; i){data1;Mcu_Yt8521_Soft_Smi_Bit_Get(index,bit);if(bit){data | 0x1;}}return data; }int main(int argc, char *argv[]) {int phy_index0;int reg_addr0;int value0;u16 Reg_Value;if(argc4){printf(Usage mdio_test w/r phy_index[2,3,5,6,7,8,9] reg_addr [value]\n );return 0;}if(argc4){phy_index(uint16_t) strtoul(argv[2], NULL, 0);reg_addr(uint16_t) strtoul(argv[3], NULL, 0);switch(phy_index){case 2:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(2,PHY2_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 3:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(3,PHY3_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 5:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(5,PHY5_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 6:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(6,PHY6_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 7:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(7,PHY7_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 8:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(8,PHY8_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;case 9:Reg_ValueSrv_Yt8521_Soft_I2c_Device_Read(9,PHY9_YT8521_ADDR, reg_addr);printf([READ]phy_index %d reg_addr 0x%x value is 0x%x\n,phy_index,reg_addr,Reg_Value);break;default:break;}}else if(argc5){phy_index(uint16_t) strtoul(argv[2], NULL, 0);reg_addr(uint16_t) strtoul(argv[3], NULL, 0);value(uint16_t) strtoul(argv[4], NULL, 0);printf([WRITE] phy_index is %d reg_addr is 0x%x value is 0x%x\n,phy_index,reg_addr,value);switch(phy_index){case 2:Srv_Yt8521_Soft_I2c_Device_Write(2,PHY2_YT8521_ADDR, reg_addr,value);break;case 3:Srv_Yt8521_Soft_I2c_Device_Write(3,PHY3_YT8521_ADDR, reg_addr,value);break;case 5:Srv_Yt8521_Soft_I2c_Device_Write(5,PHY5_YT8521_ADDR, reg_addr,value);break;case 6:Srv_Yt8521_Soft_I2c_Device_Write(6,PHY6_YT8521_ADDR, reg_addr,value);break;case 7:Srv_Yt8521_Soft_I2c_Device_Write(7,PHY7_YT8521_ADDR, reg_addr,value);break;case 8:Srv_Yt8521_Soft_I2c_Device_Write(8,PHY8_YT8521_ADDR, reg_addr,value);break;case 9:Srv_Yt8521_Soft_I2c_Device_Write(9,PHY9_YT8521_ADDR, reg_addr,value);break;default:break;}}#if 0u16 id 0;printf(//***************** Read SMI Reg of YT8521 ******************//\r\n);printf(------ PHY Identification Registers ------\r\n);id Srv_Yt8521_Soft_I2c_Device_Read(2,PHY2_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY2_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(3,PHY3_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY3_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(5,PHY5_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY5_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(6,PHY6_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY6_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(7,PHY7_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY7_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(8,PHY8_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY8_YT8521 id 0x%x\n, id);id Srv_Yt8521_Soft_I2c_Device_Read(9,PHY9_YT8521_ADDR, PHY_YT8521_ID_REG_ADDR); //reg_addr:0x03 读取的值应为0x11aprintf(PHY9_YT8521 id 0x%x\n, id);printf(Setting PHY2\n);Srv_Yt8521_Soft_I2c_Device_Write(2,PHY2_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(2,PHY2_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY3\n);Srv_Yt8521_Soft_I2c_Device_Write(3,PHY3_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(3,PHY3_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY5\n);Srv_Yt8521_Soft_I2c_Device_Write(5,PHY5_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(5,PHY5_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY6\n);Srv_Yt8521_Soft_I2c_Device_Write(6,PHY6_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(6,PHY6_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY7\n);Srv_Yt8521_Soft_I2c_Device_Write(7,PHY7_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(7,PHY7_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY8\n);Srv_Yt8521_Soft_I2c_Device_Write(8,PHY8_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(8,PHY8_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604);printf(Setting PHY9\n);Srv_Yt8521_Soft_I2c_Device_Write(9,PHY9_YT8521_ADDR, PHY_YT8521_REG_DEBUG_ADDR_OFFSET, PHY_YT8521_EXT_REG_ADDR);Srv_Yt8521_Soft_I2c_Device_Write(9,PHY9_YT8521_ADDR, PHY_YT8521_REG_DEBUG_DATA,0x604); #endifreturn 0; }5、测试验证 读取裕太8521的PHY ID
http://www.yutouwan.com/news/69690/

相关文章:

  • 公司做个网站常见的手机网站
  • 简述dw网站开发流程c mvc网站开发
  • 网站制作哪家大宁波seo推广哪家好
  • 销售网站建设怎么样网上商城网站开发
  • wordpress付费站内搜索网站开发需求清单
  • 网站建设界面建议菏泽网站备案拍照
  • django 做网站太原建站seo
  • 网站建设后台系统有哪些网站建设 php
  • 中国最大的建站平台成功营销的案例
  • 网站变成手机网站中国住建厅网站官网
  • 营销网站建设是什么意思重庆做网站建设的公司
  • 西部数码怎么上传网站网站这么做
  • 做网站卖酒随州网站建设学习
  • wordpress自助建站网站建设捌金手指下拉一
  • 青岛手机建站哪家好事件营销的步骤
  • 网站图片切换代码护理专业主要学什么
  • 做投标的在什么网站找信息网站开发和推广财务预算
  • 汉中市建设工程造价信息seo网站优化方案书
  • 品牌展示榜ui做的好的网站政务公开微信网站开发方案书
  • 定制网站为什么贵企业网站源码生成
  • 网站怎么做分类聚合上海知名的广告公司
  • 网站建设 客户定位1元涨1000粉丝网站
  • 郑州高端网站案例国外flash网站
  • 营销型网站报价明细空间qq
  • 网站图片等比缩小做网站的没有进项票怎么办
  • 成都保障房中心官方网站网页设计速成班培训
  • 建网站哪个好 优帮云合肥装饰公司前十名
  • 报告总结网站建设实验阜阳讯拓网站建设
  • 网站建设及维护服务技术指标外贸建设网站
  • 方维网站建设铁威马 Nas 做网站