ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
98326 Топик полностью
dxWAk (03.09.2007 07:20, просмотров: 105) ответил satnettv на ИМХО как связать Atmega128 и внешняя FRAM-память FM25256 схемотехнически Atmega128 и внешняя FRAM-память FM25256 уже соединены, все сделано правильно, за это не беспокоюсь. Вопрос в следующем:
ИМХО #include <msp430x16x.h> #include "define.h" #include "ringbuffer.h" #include "fram.h" extern unsigned char end_spi_tx; extern void Transfer_SPI(void); extern TCbuf SPI_RX_Buffer, SPI_TX_Buffer; void FRAM_Write_Enable(void) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(WREN); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; //IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 } void FRAM_Write_Disable(void) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(WRDI); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 } unsigned char FRAM_Read_Status_Register(void) { unsigned char statusregister; SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(RDSR); SPI_TX_Buffer.put(0xff); Transfer_SPI(); while (!end_spi_tx); // while (SPI_RX_Buffer.get_count()!=1); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 //statusregister=SPI_RX_Buffer.get(); while (SPI_RX_Buffer.get_count()) statusregister=SPI_RX_Buffer.get(); return statusregister; } void FRAM_Write_Status_Register(unsigned char streg) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(WRSR); SPI_TX_Buffer.put(streg); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 } unsigned char memory; unsigned char FRAM_Memory_Read(unsigned int adress) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(READ); SPI_TX_Buffer.put(HIGHBYTE(adress)); SPI_TX_Buffer.put((unsigned char)adress); SPI_TX_Buffer.put(0xff); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 while (SPI_RX_Buffer.get_count()) memory=SPI_RX_Buffer.get(); return memory; } void FRAM_Memory_Sequence_Read(unsigned int adress, unsigned char parts) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAMCS0; SPI_TX_Buffer.put(READ); SPI_TX_Buffer.put(HIGHBYTE(adress)); SPI_TX_Buffer.put((unsigned char)adress); for (char p=0;p<parts;p++) SPI_TX_Buffer.put(0xff); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 SPI_RX_Buffer.get(); SPI_RX_Buffer.get(); // while (SPI_RX_Buffer.get_count()) memory=SPI_RX_Buffer.get(); // return memory; } void FRAM_Memmory_Write(unsigned int adress, unsigned char data) { SPI_RX_Buffer.clear(); SPI_TX_Buffer.clear(); FRAM_Write_Enable(); FRAMCS0; SPI_TX_Buffer.put(WRITE); SPI_TX_Buffer.put(HIGHBYTE(adress)); SPI_TX_Buffer.put((unsigned char)adress); SPI_TX_Buffer.put(data); Transfer_SPI(); while (!end_spi_tx); FRAMCS1; // IE2 &= ~(UTXIE1+URXIE1); // Çàïðåòèëè ïðåðûâàíèÿ îò USART1 IFG2 &= ~(UTXIFG1+URXIFG1); // Î÷èñòèëè ôëàãè ïðåðûâàíèé USART1 } void FRAM_Init(void) { FRAM_Write_Enable(); FRAM_Write_Status_Register(0); FRAM_Write_Enable(); }