본문 바로가기

TMS320F28388D20

TMS320F28388D ] 다중 ADC 사용시 변환 순서와 동기 다중 ADC 사용시 변환 순서와 동기에 대해 알아보는데 의식의 흐름순으로 작성되었다.  먼저 사전 설명을 하자면 TMS320F28388D 337-Ball ZWT 패키지는 Temp Sensor를 제외하고 총 24채널의 ADC 입력을 처리할 수 있다. 근데 그중에 3개(ADCINA0, ADCINA1, ADCINB1) 채널은 DAC 용도로도 사용된다. 예를 들어 DAC 3채널을 쓰면 ADC는 21채널만 쓸 수 있는거다. DSP의 ADC 모듈은 총 4개가 있다. ADC-A, ADC-B, ADC-C, ADC-D. 그리고 Temp Sensor는 DSP에 내장되어 있고 ADC-A 모듈과 이미 연결되어 있다. TI가 제공한 예제를 사용하면 쉽게 칩의 온도를 읽을 수 있다.      아래 그림은 ADC 모듈 블럭이다. .. 2024. 5. 1.
TMS320F28388D ] 부트핀 구성을 바꾸는 법 & SCI boot 모드 사용시 디폴트 TX/RX핀 말고 다른 핀을 사용하는 방법 TRM에서 부트핀 구성을 바꾸는 방법과 SCI boot 모드 사용시 디폴트 TX/RX핀 말고 다른 핀을 사용하는 방법을 확인해보자.   CPU의 Boot 프로세스 TRM의 Boot flow를 살펴보면 디버거가 연결되어 있느냐에 따라 두가지 종류의 Boot가 있다. Standalone BootEmulation Boot       Emulation Boot 프로세스 먼저 Emulation Boot 일 때는 살펴보면 EMUBOOTPINCONFIG를 읽어 정의된 행동을 하도록 되어있다.       Standalone Boot 프로세스 그리고 Standalone Boot인 경우에는 Zx-BOOTPINCONFIG, Zx-BOOTDEF를 읽도록 되어있는데 부트핀 구성 정보에는 Z2와 Z1 두 그룹이 있다.Z2가 Z1.. 2024. 4. 10.
TMS320F28388D ] ECAP ECAP CAP 은 Capture 의 약자로 펄스 신호의 시간정보를 검출하는 기능을 한다. 펄스의 Rising edge와 Falling edge 시간 정보를 확인하여 주기, 듀티 등을 측정할 수 있고, 펄스의 특정 edge에서 인터럽트를 발생시킬 수도 있다. ECAP의 사용 예 회전체의 속도 검출 신호의 Pulse period, Duty ratio 측정 출력이 PWM 타입인 센서의 정보 디코딩 ECAP의 특징 TMS320F28388D 칩에는 7개의 eCAP 모듈이 있다. 그리고 eCAP 모듈의 특징은 다음과 같다. 200MHz 시스템 클럭사용, 5ns의 시간 분해능 캡쳐 핀은 Input X-BAR를 통해 라우팅되므로 어떤 GPIO든 사용 가능 32-bit 타이머 기반 4개의 32-bit 타임 스탬프 캡쳐.. 2023. 8. 14.
TMS320F28388D ] CM, C28x 코어 진입점으로 점프 CM 먼저 CM코어의 경우는 Application 실행을 위한 Entry Point는 0x200001 이고 해당 주소로 점프하면 된다. https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/923512/tms320f28388d-cm-core-code-jump-to-execution-giving-meets-error-asking-for-how-to-do TMS320F28388D: CM core code jump to execution giving meets error, asking for how to do - C2000 microcontrollers forum - .. 2023. 5. 7.
TMS320F28388D ] Flash API 사용 일단 아래 경로에 있는 FlashAPI 라이브러리를 복사해 프로젝트 안에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\lib 그리고 아래 경로의 FlashAPI를 사용하기 위한 헤더가 모여있는 폴더도 복사해서 프로젝트에 가져온다. C:\ti\c2000\C2000Ware_[Version No]\libraries\flash_api\f2838x\cm\include\FlashAPI 그리고 Include search path에 추가해준다. 복사해서 가져오지 않아도 c2000ware 폴더 내 경로를 추가하면 되긴하지만 선호하지 않는방법이다. 이제 아래 헤더를 include하면 FlashAPI를 가져다 쓸 수 있다. #include ".. 2023. 4. 20.
TMS320F28388D ] TI 제공 부트로더 사용해서 CPU2, CM application 다운로드하기 사용방법은 README.txt 파일에서 찾을 수 있다. When the application starts, the serial connection is with the SCI module which is owned by CPU1. Only commands designated for CPU1 are acceptable at this point before booting CPU2.  If a CPU2 command is selected, the application asks the user for a different option.  After booting to CPU2, either with "Run CPU1 Boot CPU2" or "Reset CPU1 Boot CPU2," CPU.. 2023. 4. 19.
TMS320F28388D ] TI 제공 부트로더 & Flash programmer 툴 사용하기 관련 문서   TI가 ROM에 마스킹 해둔 부트로더 중 SCI boot와 Flash programmer를 사용해 어플리케이션을 program 해보자.   전체 Flow 요약해보면 Boot Mode를 SCI Boot로 바꾸고 SCI ROM bootloader를 사용해 flash kernel 코드를 통째로 램에 복사해 올힌다. 그리고 RAM에 올린 flash kernel을 실행하여 User Application을 Flash에 Program한다.     먼저 내장 SCI bootloader를 사용하기 위해 bootmode를 SCI/Wait Boot로 변경해야 한다.   만약 컨트롤 카드를 쓰고 있다면 S2 스위치로 bootmode를 변경하면 되고, 아닌 경우 해당 b.. 2023. 4. 18.
TMS320F28388D ] Ethernet_resetModule() 무한루프 문제 PHY에 공급되는 클락이 잘못되있거나 GPIO 설정이 잘못되어 있으면 CM 쪽에서 Ethernet 초기화시 Ethernet_resetModule() 함수 안에서 hang되는 문제가 있다. 해당 현상 발생시 CPU1쪽 ethernet Pin mux 설정 코드를 살펴보고 주변회로가 컨트롤카드와 동일하게 구성되어있는지 체크하는게 좋다. 참고 : https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1164646/tmdscncd28388d-stop-with-ethernet_resetmodule-in-lwip TMDSCNCD28388D: Stop with Ethernet_.. 2023. 3. 31.
TMS320F28388D ] 터미널 모니터와 메모리 덤프 터미널 모니터란 시스템의 상황을 모니터하고 터미널에 명령어를 쳐서 여러가지 일을 수행하게끔 하기 위해 윈도우의 명령프롬프트 처럼 MCU에 Command Line Interface를 구현 것을 말한다. 내가 직접 구현한건 아니고 유튜버 baram 님의 영상을 보고 공부하려고 아래 출처 stm32 코드를 가져와 이식했다. 출처 : https://github.com/chcbaram/stm32f411 GitHub - chcbaram/stm32f411 Contribute to chcbaram/stm32f411 development by creating an account on GitHub. github.com C28x 코어는 데이터 타입이 STM32와 달라서 주의할 부분이 있다. char 가 2 byte, int.. 2023. 1. 10.
TMS320F28388D ] 링버퍼 사용 SCI 에코백 이전글 : 2022.12.30 - [DSP, MCU/TMS320F2838x (C28x)] - 링 버퍼 Circular Buffer 링 버퍼 Circular Buffer 링 버퍼를 구현하기위해선 큐를 먼저 알아야 한다. 큐는 FIFO(First In First Out) 구조로 먼저들어온 데이터가 먼저 나가는 구조이다. 이와 비교되는 자료구조는 LIFO(Last In First Out) 구조인 스택이 있다 eteo.tistory.com 먼저 링버퍼를 사용하지 않는 코드는 다음과 같다. main loop에서 Blocking 방식으로 에코백하는 버전 #include "driverlib.h" #include "device.h" void main(void) { uint16_t receivedChar; Device_.. 2022. 12. 30.
링 버퍼 Circular Buffer 링 버퍼를 구현하기위해선 큐를 먼저 알아야 한다. 큐는 FIFO(First In First Out) 구조로 먼저들어온 데이터가 먼저 나가는 구조이다.  이와 비교되는 자료구조는 LIFO(Last In First Out) 구조인 스택이 있다. 스택은 나중에 들어온 데이터가 먼저 나오는 구조로 함수 호출을 생각하면 된다. 함수가 호출되면 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 스택에 넣어지고 함수에서 리턴 시 스택에서 반환 주소값을 POP하여 해당 함수가 호출되기 이전 상태로 되돌아 갈 수 있다.        다시 돌아와서 링버퍼란 고정 크기의 큐를 마치 처음과 끝이 연결된 것처럼 사용하는 구조를 말한다. 그리고 버퍼에 쓰고 읽을 위치를 알기 위한 head 와.. 2022. 12. 30.
TMS320F28388D ] CM에서 USB MSC 사용 개인 기록용 정리글 CPU1 설정 // Set up the auxiliary PLL so a 60 MHz output clock is provided to the USB module. // This fixed frequency is required for all USB operations. SysCtl_setAuxClock(SYSCTL_AUXPLL_OSCSRC_XTAL | SYSCTL_AUXPLL_IMULT(48) | SYSCTL_REFDIV(2U) | SYSCTL_ODIV(5U) | SYSCTL_AUXPLL_DIV_2 | SYSCTL_AUXPLL_ENABLE | SYSCTL_DCC_BASE_0); // Allocate Shared Peripheral USB to the CM Side. SysCtl_al.. 2022. 12. 28.
TMS320F28388D ] CPU2에서 SD카드 사용 + 속도 테스트 개인 기록용 정리글 CPU1 설정 // 핀먹스 세팅 // GPIO103 -> SDCardCS Pinmux GPIO_setPinConfig(GPIO_103_GPIO103); // SPIC -> mySPI0 Pinmux GPIO_setPinConfig(GPIO_100_SPIC_SIMO); GPIO_setPinConfig(GPIO_101_SPIC_SOMI); GPIO_setPinConfig(GPIO_102_SPIC_CLK); // 칩셀렉트핀 init //SDCardCS initialization GPIO_setDirectionMode(SDCardCS, GPIO_DIR_MODE_OUT); GPIO_setPadConfig(SDCardCS, GPIO_PIN_TYPE_STD); // CS핀 마스터코어 CPU2로 설정.. 2022. 12. 28.
TMS320F28388D ] DMA 예제 gsram에서 DMA를 사용해 데이터를 이동시키는 예제    //// Included Files//#include "driverlib.h"#include "device.h"#include "board.h"//// DMA data sections// 이전글에 썼지만 DMA에 접근 가능한 메모리 영역이 정해져 있고 그 중 하나가 RAMGS이다.// 따라서 source 와 destination으로 사용할 버퍼를 RAMGS 영역에 배치하는 전처리 지시 코드가 필요하다.#pragma DATA_SECTION(sData, "ramgs0"); // map the TX data to memory#pragma DATA_SECTION(rData, "ramgs1"); // map the RX data to memory//.. 2022. 12. 11.
TMS320F28388D ] DMA 파악하기 DMA CPU의 관여 없이 하드웨어적으로 메모리간 또는 메모리와 페리페럴간 데이터를 이동시킬 수 있는 컨트롤러이다.       DMA의 특징DMA 모듈이 데이터 이동을 시작하기 위해서는 페리퍼럴 또는 소프트웨어 트리거가 필요하다.6개의 독립적인 DMA 채널이 있고, 각각의 채널은 PIE interrupt를 가지고 CPU에게 데이터 전송 시작시점 또는 완료시점을 알릴 수 있다.DMA 채널1은 다른 채널보다 우선순위를 가질 수 있게 설정할 수 있다.      DMA Block Diagram  DMA 가 접근가능한 페리페럴과 메모리 영역에 대해 나와있다. 특히 메모리쪽을 보면 RAMGS는 접근가능하지만 RAMM 이나 RAMLS는 접근을 못한다.          DMA를 사용하기 위해 필요한 설정 1. 데이터를.. 2022. 12. 11.
TMS320F28388D ] 타이머, Timer Interrupt 사용하기 TMS320F28388D 모델에는 32bit Timer가 CPU당 각 3개씩 총 6개가 있다. 특이한 것은 Timer1,2 인터럽트는 각각 INT13, INT14에 연결되어 있고 Timer0는 PIE Interrupt Group 1의 7번째로 자리잡고 있다. 매뉴얼 153페이지 벡터 테이블 CPU0 TIMER가 higher priority를 가지고 그 다음이 CPU1 TIMER 그리고 CPU2 TIMER 이다. CPU 타이머 레지스터는 다음과 같다. 먼저 카운터 레지스터의 설명을 살펴보자. TIM 레지스터는 SYSCLOCK 을 Prescaler값(TDDR+1)으로 분주한 clock cycle 에 따라 감소하고 그러다 0에 도달하면 Period 레지스터(PRD)에 있는 값으로 reload 되며 타이머 인터.. 2022. 12. 5.
TMS320F28388D ] Watchdog Timer 사용하기 Watchdog Timer 는 그 단어에서 유추할 수 있는 그대로 CPU를 감시하면서 시간을 계수하는 회로로, 프로그램이 의도치 않게 비정상적으로 중단되거나 무한루프(Infinite Loop)에 빠지는 등 시스템 통제가 불가능한 상황에서 자동으로 시스템을 리셋하는 하드웨어 기능이다. 내부에 있는 8비트 Watchdog 업 카운터가 최대 값인 0xFF을 넘어 overflow 되면 리셋(또는 인터럽트)이 일어나는데 Watchdog Timer에 의한 CPU리셋을 원하지 않는다면 타이머의 카운터가 최대 값에 도달하기 전에 카운터 값을 0으로 초기화(Clear)하는 코드가 실행되어야 한다. 즉, 칩이 실행하는 프로그램이 안정적이고 연속적으로 동작하려면, 프로그램 상에서 Watchdog Timer에 설정된 시간주기.. 2022. 12. 3.
TMS320F28388D ] printf 사용하기 위한 설정 c표준 입출력함수 전부 해당한다. 먼저 stdio.h 를 include 하고 project properties - Build - Linker - Basic Option 에 가서 Heap size를 늘린다. Heap Size가 공백인 경우 default 값은 0x400 이다. Stack size 도 늘린 후 cmd 파일에 가서 메모리맵을 보며 .stack 과 .sysmem(=.heap)을 적절히 할당한다. Compiler - Advanced Options - Language Options 에 가서 --printf_support를 체크한다. 기존에 설정 됐더라도 다시 눌러줘야 summary of flags set 에 뜨는 것 같다. --printf_support의 옵션인 minimal/full/nofloat.. 2022. 11. 30.
TMS320F28388D ] SD카드 읽기/쓰기 // FILE: sd_fat32.c // // TITLE: SD FATFS Library Example // //! \addtogroup driver_example_list //! SD FATFS Library Example //! //! This example demonstrates how to use the FATFS library. //! //! \b External \b Connections \n //! - Connect the SPI signals identifed in the SysConfig to an SD CARD. //! //! \b Watch \b Variables \n //! - None. //! // // Included Files // #include "driverlib.h" #i.. 2022. 11. 24.
TMS320F28388D ] 프로젝트 복사하기 Copy와 Paste로 복붙한다. 프로젝트명을 적어 복사한다. F2키를 눌러 .c 파일과 .syscfg 파일도 프로젝트명과 동일하게 바꾼다. 이전 빌드로 생긴 CPUx_RAM 또는 CPUx_FLASH 폴더는 지워준다. 링커 설정에 아래와 같이 되어 있기 때문에 빌드하면 생성되는 실행파일(.out)포함 출력물도 프로젝트명으로 생긴다. 참고로 STM32에선 .elf 로 생성됐었다. 필요한 경우 Debug Configuration 을 수정하고 디버그한다. 2022. 9. 7.