반응형
매번 시리얼 통신으로 셋업치를 날려주기에는 번거로우며 오류의 소지가 있어 롬에 기록하여 전 셋팅치를 기록하기 위해 사용
#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "drivers/pinout.h"
#include "driverlib/pin_map.h"
#include "driverlib/rom.h"
#include "driverlib/rom_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "utils/uartstdio.h"
//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, uint32_t ui32Line)
{
while(1);
}
#endif
//ROM SAVE STRUCT E2PROM
struct E2PROM
{
uint8_t value1;
uint8_t value2;
uint16_t value3;
uint8_t value4[12];
};
struct E2PROM e2prom_write_value = {5,7,9826, "Hello World"}; /* Write struct */
struct E2PROM e2prom_read_value = {0,0,0,""}; /* Read struct */
uint32_t Write(void){
uint32_t result = EEPROMProgram(&e2prom_write_value,0x0000,sizeof(e2prom_write_value));
return result;
}
void Read(void){
EEPROMRead(&e2prom_read_value, 0x0000, sizeof(e2prom_read_value));
}
//*****************************************************************************
//
// System clock rate in Hz.
//
//*****************************************************************************
uint32_t g_ui32SysClock;
void
ConfigureUART(void)
{
//
// Enable the GPIO Peripheral used by the UART.
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//
// Enable UART0
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
//
// Configure GPIO Pins for UART mode.
//
ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
//
// Initialize the UART for console I/O.
//
UARTStdioConfig(0, 115200, g_ui32SysClock);
}
int
main(void)
{
//
// Run from the PLL at 120 MHz.
//
g_ui32SysClock = MAP_SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
//
// Initialize the UART.
//
ConfigureUART();
//EEPROMInit
SysCtlPeripheralEnable(SYSCTL_PERIPH_EEPROM0); // EEPROM activate
EEPROMInit(); // EEPROM start
Read();
UARTprintf("First Read value 1 = %d \r\n", e2prom_read_value.value1);
UARTprintf("First Read value 2 = %d \r\n", e2prom_read_value.value2);
UARTprintf("First Read value 3 = %d \r\n", e2prom_read_value.value3);
UARTprintf("First Read value 4 = %s \r\n", e2prom_read_value.value4);
//수정
e2prom_write_value.value1 = 1 ;
e2prom_write_value.value2 = 2 ;
e2prom_write_value.value3 = 3 ;
uint8_t value[12] = "bitcoin 35k" ;
memcpy(e2prom_write_value.value4, value, sizeof(value));
Write();
Read();
UARTprintf("Second Read value 1 = %d \r\n", e2prom_read_value.value1);
UARTprintf("Second Read value 2 = %d \r\n", e2prom_read_value.value2);
UARTprintf("Second Read value 3 = %d \r\n", e2prom_read_value.value3);
UARTprintf("Second Read value 4 = %s \r\n", e2prom_read_value.value4);
}
저장할 값들을 E2PROM에 선언해 놓고 해당 값을 저장 및 읽어온다.
이전 값에서 3 , 2 , 1 , bitcoin 36k (ROM에 기록이 잘되는거 확인)
변경된 값에서 1 , 2 , 3 , bitcoin 35k (변경된 값이 잘 기록되는지 확인)
이외에 터미널을 사용하여 UARTprintf를 사용하는 방법
USB를 연결하면 가상 시리얼 포트가 생기는데 해당 포트를 이용한다.
현재는 COM7번 (Stellaris Virtual Serial Port(COM7))
View에서 Terminal 클릭 이후 Open a Terminal
Serial Terminal 선택 - 위 장치관리자의 COM포트를 입력 - OK
반응형
'MCU & PLC' 카테고리의 다른 글
C# Melsec MxComponent V4 #2 코딩편 (문자열 보내기 받기, 재연결 포함) (2) | 2021.07.05 |
---|---|
C# Melsec MxComponent V4 #1 연결하기 (설정편) (0) | 2021.07.05 |
MCU보드에 24V 입력을 받아보자 (24V -> 3V 레귤레이터) (0) | 2021.05.21 |
출력(OUTPUT) 5V를 24V로 변환하기 (0) | 2021.05.20 |
TinyPLC (SB-36R TPC37) (0) | 2021.05.12 |