标签:
int write_chip(UINT32 addr, UINT32 data) { if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, datal; UINT32 dataread; datah = (UINT16)(data >> 16); FPGA_REG(addr) = datah; rwWait(60); datal = (UINT16)(data & 0xFFFF); FPGA_REG(addr) = datal; rwWait(60); #if 0 read_chip(addr, &dataread); if (data != dataread) { printf("ERROR:write 0x%08X; read 0x%08X\n", data, dataread); return OK; } #endif read_chip(addr, (UINT32 *)(&dataread)); if(print_level == 1) printf("spi write 0x%05X: 0x%08X\n", addr, data); return OK; } else if(1 == fpgaRWMode) /* i2c mode */ { int ret = 0; ret = fpgaMAC_i2c_write(0,0,0,addr,(unsigned char *)(&data),4); if(print_level == 1) { if(ret != 0) printf("spi write failed! read 0x%05x: 0x%08x\n", addr, data); else printf("spi write 0x%05x: 0x%08x\n", addr, data); } if(!ret) return OK; else return ERROR; } else if(2 == fpgaRWMode) /* spi mode */ { int ret = 0; unsigned char *wtBuff = (unsigned char *)malloc(8); if(NULL == wtBuff) { printf("No memory!\n"); return -1; } *wtBuff = (unsigned char)((data>>24) & 0xff); *(wtBuff+1) = (unsigned char)((data>>16) & 0xff); *(wtBuff+2) = (unsigned char)((data>>8 ) & 0xff); *(wtBuff+3) = (unsigned char)((data ) & 0xff); ret = fpga_spi_write(addr,(unsigned char *)(wtBuff),4); if(print_level == 1) { if(ret != 0) printf("spi write failed! read 0x%05x: 0x%08x\n", addr, data); else printf("spi write 0x%05x: 0x%08x\n", addr, data); } free(wtBuff); if(!ret) return OK; else return ERROR; } else { return ERROR; } } int read_chip(UINT32 addr, UINT32 *data) { if(data == NULL) return ERROR; if(0 == fpgaRWMode) /* localbus mode */ { UINT16 datah, datal; datah = FPGA_REG(addr); rwWait(60); datal = FPGA_REG(addr); rwWait(60); *data = datal + (((UINT32)datah) << 16); if(print_level == 1) printf("localbus read 0x%05X: 0x%08X\n", addr, *data); return OK; } else if(1 == fpgaRWMode) /* i2c mode */ { int ret = 0; ret = fpgaMAC_i2c_read(0,0,0,addr,(unsigned char *)data,4); if(print_level == 1) { if(ret != 0) printf("i2c read failed! read 0x%05x: 0x%08x\n", addr, *data); else printf("i2c read 0x%05x: 0x%08x\n", addr, *data); } if(!ret) return OK; else return ERROR; } else if(2 == fpgaRWMode) /* spi mode */ { int ret = 0; ret = fpga_spi_read(addr,(unsigned char *)data,4); if(print_level == 1) { if(ret != 0) printf("spi read failed! read 0x%05x: 0x%08x\n", addr, *data); else printf("spi read 0x%05x: 0x%08x\n", addr, *data); } if(!ret) return OK; else return ERROR; } else { return ERROR; } }
标签:
原文地址:http://www.cnblogs.com/x113/p/4271424.html