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();
}