전체 글 268

ARM 명령어 아키텍처

안녕하세요. 오늘은 ARM 명령어 아키텍처에 대해 알아보겠습니다 * Instruction Set Architecture(ISA) 소프트웨어와 하드웨어 사이에서 합의된 규칙입니다. 명령어 집합, 명령어 형식을 지정합니다. 컴파일러 개발자는 이러한 규칙을 가지고 C와같은 고급언어에서 기계어로 번역하는 컴파일러를 설계합니다. 하드웨어디자이너는 이러한 규칙을 따라 프로세서를 만듭니다. ISA에는 RISC(Reduced Instruction Set Computer)와 CISC(Complexe Instruction Set Computer) 두가지 범주로 구분할 수 있습니다. 모바일, 임베디드에서는 주로 RISC를 사용하고 데스크탑, 서버에서 사용되는 x86은 CISC를 사용합니다. RISC프로세서는 일반적으로 간단..

MCU지식 2023.04.23

FreeRTOS-undefined reference to `vTaskList'에러

안녕하세요. 오늘은 FreeRTOS의 vTaskList함수를 사용하려할때 발생하는 undefined reference to `vTaskList' 에러에 대해 알아보겠습니다. vTaskList함수를 사용하려면 vTaskList함수를 사용할수있게 매크로를 설정해야합니다. FreeRTOS.h에 있는 configUSE_TRACE_FACILITY와 configUSE_STATS_FORMATTING_FUNCTIONS을 1로 설정하면 됩니다. (https://www.freertos.org/a00021.html) * vTaskList함수 사용할수있게 설정 #define configUSE_STATS_FORMATTING_FUNCTIONS 1 #define configUSE_TRACE_FACILITY 1 * 태스크생성 if ..

FreeRTOS 2023.04.02

엔디안이란?(빅엔디안, 리틀엔디안)

안녕하세요 오늘은 엔디안에 대해 알아보겠습니다. 엔디안이란 데이터에 여러 바이트가 있는 경우 바이트 순서를 정하는 규칙입니다. 빅 엔디안(big endian)과 리틀 엔디안(little endian)두가지 방법이 있습니다. 리틀 엔디안은 숫자의 하위 바이트가 메모리의 최하위 주소에 저장되고 상위 바이트가 최상위 주소에 저장됨을 의미합니다. 빅 엔디안은 숫자의 상위 바이트가 최하위 주소에 저장되고 하위 바이트가 최상위 주소에 저장됨을 의미합니다. STM32는 일반적으로 리틀 엔디안 형식입니다 실제로 빌드된 STM32의 메모리값을 보겠습니다. 볼 메모리 값은 _estack입니다 _estack은 ORIGIN(RAM) + LENGTH(RAM)이므로 0x20005000입니다. .bin파일을 HxD에디터로 열어봤습..

MCU지식 2023.03.26

ATMEGA128을 STM32코드 형식(HAL 라이브러리) 으로 바꾸기

안녕하세요. 오늘은 ATMEGA128코드를 STM32 코드 형식(HAL 라이브러리)으로 바꿔보겠습니다. 먼저 "아트메가/이론 ATMEGA128 주솟값으로 제어하기" 글 참고바랍니다. https://wowon.tistory.com/280 GPIO A,B,C출력/입력만 테스트 해보겠습니다. 먼저 제어할 레지스터가 PORT, DDR, PIN입니다. 데이터들은 1바이트씩이고 PIN다음에 DDR이 나오고 다음에 PORT가 나옵니다. 먼저 GPIO 주소의 시작점을 define해줍니다. #define GPIOA_BASE (0x39) #define GPIOB_BASE (0x36) #define GPIOC_BASE (0x33) 그리고나서 PIN,DDR,PORT 구조체를 만듭니다 typedef struct { volati..

아트메가/이론 2023.03.01

ATMEGA128 주솟값으로 제어하기

안녕하세요. 오늘은 ATMEGA128의 PORTA를 데이터시트에 나와있는 주솟값으로 제어해보겠습니다. 주솟값으로 제어하는 테스트를 하는 이유는 다른 32bit mcu를 사용할 때 (STM,NXP등등) 주솟값으로 제어하는 방법을 알면 좋아서 먼저 비교적 간단한 8bit mcu인 ATMEGA로 해보겠습니다. 목표는 DDRA와 PORTA를 사용하지 않고 데이터시트에 나와있는 주소로 DDRA와 PORTA를 제어하는 것입니다. 먼저 DDRA 선언을 따라가보겠습니다. #define DDRA_SFR_IO8(0x1A) #define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET) #define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *..

아트메가/이론 2023.02.25

ATMEGA128 SPI통신 알아보기 2편

안녕하세요. 1편에 이어서 ATMEGA SPI통신 READ를 구현해보겠습니다. 1편에서는 SPI세팅과 SPI WRITE를 했었습니다 (1편:https://wowon.tistory.com/277) SPI에서 마스터가 슬레이브에게 READ를 하려면 클럭을 흔들어야하는데 클럭은 마스터만 흔들 수 있습니다. 그래서 SPI통신은 WRITE를할때 READ를 같이 합니다. 그래서 READ를 하려면 의미없는 값을 WRITE하면 됩니다. 일반적으로 슬레이브(센서)를 READ를 할때 아래의 방식으로 합니다 1) 마스터가 슬레이브에게 특정값 WRITE함 2) 슬레이브는 특정값에 맞는 데이터를 준비해놓음 3) 마스터가 슬레이브에게 의미없는값을 WRITE함 4) 슬레이브는 특정값을 줌 READ해야하는 레지스터는 SPDR입니다...

아트메가/이론 2023.02.19

ATMEGA128 SPI통신 알아보기 1편

안녕하세요. 오늘은 ATMEGA128로 SPI통신에대해 알아보겠습니다. 이 글에서는 SPI통신 WRITE만 알아보고 실제로 8*8 dot matrix(MAX7219사용)을 제어해보겠습니다 기본적인 SPI개념은 아래 글 참조바랍니다 https://wowon.tistory.com/231 SPI통신 아두이노와 오실로스코프로 확인해보기 1편 안녕하세요. 오늘은 SPI통신에 대해 알아보겠습니다. SPI란 Serial Peripheral Interface의 약자입니다. 특징으로는 데이터를 동시에 보내고 받을 수 있는 전이중 모드를 지원하는 동기식 직렬 통신 인터 wowon.tistory.com https://wowon.tistory.com/276 SPI통신 아두이노와 오실로스코프로 확인해보기 2편 안녕하세요. 오늘..

아트메가/이론 2023.02.05

SPI통신 아두이노와 오실로스코프로 확인해보기 2편

안녕하세요. 오늘은 SPI통신을 알아보는 2편입니다. 1편: https://wowon.tistory.com/231 참고사항 (ARDUINO UNO기준) MOSI (SDI) : 11번핀 MISO (SDO) : 12번핀 CLOCK : 13번핀 SS (CS) : 10번핀(or 사용자 지정) SPI통신은 SS핀을 LOW로 설정한다음에 MOSI핀과 CLOCK핀을 흔들면 됩니다. CLOCK은 8번 흔들리고 MOSI핀도 8번 흔들립니다 위의 사진은 SPI속도 200Mhz, MSBFIRST, 0x64(100)전송한 파형입니다. 속도가 200Mhz설정했으므로 1클럭의 속도는 5ns입니다. 0x64 = 0b 0110 0100입니다. MSBFIRST이므로 위와같이 파형이 나왔고, LSBFIRST면 아래처럼 나옵니다. 기본은..

아두이노/이론 2023.01.31

STM32로 DS1302제어하기(3편)

안녕하세요. 2편에서 단순히 초만 읽었는데, 3편에서는 시간,분,초를 설정하고 시간, 분, 초를 읽어보겠습니다 -읽기 void readTime(uint8_t *time) { //array : 0: seconds, 1: minutes, 2: hours //seconds read HAL_GPIO_WritePin(CE_GPIO_Port, CE_Pin, 1); commandWrite(SCLK_GPIO_Port, SCLK_Pin, I_O_GPIO_Port, I_O_Pin, 0x81); time[0] = commandRead(SCLK_GPIO_Port, SCLK_Pin, I_O_GPIO_Port, I_O_Pin); HAL_GPIO_WritePin(CE_GPIO_Port, CE_Pin, 0); // minutes r..

STM32/활용 2023.01.24