|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
有誰讀過FM25C64 |
| 作者:janemxq 欄目:DSP技術(shù) |
我用2812讀EEPROM(FM25C64),通訊方式采用spi,但是寫入一個(gè)數(shù),讀出的數(shù)總是 0xFF, *************************************************************************/ #include "DSP28_Device.h" unsigned int *ram_addr; unsigned int flag,EEPROM_Addr11,Write_Length11; unsigned CHAR Spi_VarRx[155]; void InitSpi(void) { // Initialize SPI-A: GpioDataRegs.GPFDAT.bit.GPIOF3 = 1;//SPISTEA high GpioDataRegs.GPFDAT.bit.GPIOF14=1; // 25LC_HOLD GpioDataRegs.GPADAT.bit.GPIOA4=1; // 25LC_WP OUTPUT /* 8 bit data */ // 47 C7 polarity =1 07 87 polarity=0 // 16 phase =1 06 phase=0 SpiaRegs.SPICCR.all = 0x07; //上升沿8位長度 清 sw reset 位 SpiaRegs.SPICTL.all = 0x06; //信號(hào)不延遲.3/主機(jī).2/使能發(fā)送.1/使能 int 0 SpiaRegs.SPIBRR = 0x1e; //低速外設(shè)BAUDRATE=150M/4/15=2.5M SpiaRegs.SPICCR.all = 0x87; //準(zhǔn)備下一字節(jié)收發(fā) 置 sw reset 位 //PieCtrl.PIEIER6.bit.INTx1 = 1; //PieCtrl.PIEIER6.bit.INTx2 = 1; } unsigned int Spi_TxReady(void) { unsigned int i; if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1) { i = 0; } else { i = 1; } return(i); } unsigned int Spi_RxReady(void) { unsigned int i; if(SpiaRegs.SPISTS.bit.INT_FLAG == 1) { i = 1; } else { i = 0; } return(i); } /********************************************************************* 函數(shù)名: void EEPROM_Write_Enable(void) 目的: EEPROM的寫使能 輸入: 無 輸出: 無 *********************************************************************/ void EEPROM_Write_Enable(void) { // unsigned int i; //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 0; //使能ste asm (" RPT #2 || NOP"); //發(fā)送SPI SpiaRegs.SPITXBUF = WREN; // //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // delay_time(60); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 1; } /********************************************************************* 函數(shù)名: void EEPROM_Write_Disable(void) 目的: EEPROM的寫關(guān)閉 輸入: 無 輸出: 無 *********************************************************************/ void EEPROM_Write_Disable(void) { //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 0; //發(fā)送SPI SpiaRegs.SPITXBUF = WRDI; // //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // delay_time(100); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 1; } /********************************************************************* 函數(shù)名: unsigned int EEPROM_Read_Status(void) 目的: EEPROM的讀狀態(tài) 輸入: 無 輸出: 無 *********************************************************************/ unsigned int EEPROM_Read_Status(void) { unsigned int i,data; //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 0; //發(fā)送SPI SpiaRegs.SPITXBUF = RDSR; //判斷SPI發(fā)送準(zhǔn)備好 // while(Spi_TxReady() == 0); //發(fā)送SPI // SpiaRegs.SPITXBUF = 0xff; for(i = 0; i < 100; i++); //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_RxReady() == 0); //發(fā)送SPI data = SpiaRegs.SPIRXBUF; //判斷SPI發(fā)送準(zhǔn)備好 // while(Spi_TxReady() == 0); // GpioDataRegs.GPFDAT.bit.GPIOF3 = 1; return data; } /********************************************************************* 函數(shù)名: void EEPROM_Write_Status(unsigned int write_status) 目的: EEPROM的寫狀態(tài) 輸入: write_status 寫狀態(tài)寄存器的控制字 輸出: 無 *********************************************************************/ void EEPROM_Write_Status(unsigned int write_status) { unsigned int i; //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); GpioDataRegs.GPFDAT.bit.GPIOF3 = 0; asm (" RPT #2 || NOP"); //發(fā)送SPI SpiaRegs.SPITXBUF = WRSR; //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); //發(fā)送SPI SpiaRegs.SPITXBUF = write_status; //判斷SPI發(fā)送準(zhǔn)備好 while(Spi_TxReady() == 0); // //delay_time(100); &nb |
| 2樓: | >>參與討論 |
| 作者: ssj 于 2006/7/18 10:46:00 發(fā)布:
仔細(xì)看看datasheet 仔細(xì)讀讀25C64手冊(cè)的讀寫時(shí)序,有可能是你的寫過程沒有嚴(yán)格按照他的要求作造成的。我就范過同樣的毛病,查問題查的頭疼。 |
|
| 3樓: | >>參與討論 |
| 作者: f702p 于 2006/7/18 15:27:00 發(fā)布:
還沒解決呀? 其實(shí)你讀的是偽數(shù)據(jù)呀,呵呵, 簡單的說,每次spitx就有一個(gè)偽數(shù)據(jù),這樣說,懂不?? |
|
|
|
| 免費(fèi)注冊(cè)為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |