Руки кривые fram.c:
<c>
#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;
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;
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);
FRAMCS1;
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;
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;
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;
IFG2 &= ~(UTXIFG1+URXIFG1); // Очистили флаги прерываний USART1
SPI_RX_Buffer.get();
SPI_RX_Buffer.get();
}
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;
IFG2 &= ~(UTXIFG1+URXIFG1); // Очистили флаги прерываний USART1
}
void FRAM_Init(void)
{
FRAM_Write_Enable();
FRAM_Write_Status_Register(0);
FRAM_Write_Enable();
}
</c>
fram.h:
<c>
// OP-CODE Commands
#define WREN 0x06 //Set Write Enable Latch
#define WRDI 0x04 //Write Disable
#define RDSR 0x05 //Read Status Register
#define WRSR 0x01 //Write Status Register
#define READ 0x03 //Read Memory Data
#define WRITE 0x02 //Write Memory Data
//Chip Select
#define FRAMCS1 (P1OUT |= BIT6)
#define FRAMCS0 (P1OUT &= ~BIT6)
void FRAM_Init(void);
void FRAM_Write_Enable(void);
void FRAM_Write_Disable(void);
unsigned char FRAM_Read_Status_Register(void);
void FRAM_Write_Status_Register(unsigned char streg);
unsigned char FRAM_Memory_Read(unsigned int adress);
void FRAM_Memmory_Write(unsigned int adress, unsigned char data);
void FRAM_Memory_Sequence_Read(unsigned int adress, unsigned char parts);
</c>
-
- Оригинальный единственный коммент на весь код ! - MegaJohn(03.09.2007 11:58)
- Ага, и то скопирован из прошлого проекта). Я коммменты пишу как весь проект заканчиваю. - dxWAk(03.09.2007 15:49)
- Оригинальный единственный коммент на весь код ! - MegaJohn(03.09.2007 11:58)