ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
3 июля
98358 Топик полностью
AVR (03.09.2007 11:01, просмотров: 121) ответил dxWAk на Вот в виде архива
Руки кривые 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>