본문 바로가기

DSP25

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 ] CCS에서 hex 파일 출력하는법 프로젝트 우클릭 - C2000 Hex Utility Enable 'C2000 Hex Utility' 체크 --memwidth, --romwidth 16으로 설정 출력 포맷은 .hex Output Format Options는 Intel hex 선택 만약 hex말고 bin파일로 출력하려면 내가 올린 다른 글을 참고하면 된다. tiobj2bin, mkhex4bin, hex2000 툴을 사용하여 out파일로부터 bin파일을 생성해내는 방법이다. 2023.04.20 - [DSP, MCU/TMS320F2838x (C28x)] - TMS320F28388D ] CSS에서 bin 파일 생성하는 법, filling a hole with 0xFF not 0x00 위 방법 말고 이미 생성된 hex파일을 bin파일로 변경하려면.. 2023. 12. 28.
TMS320F28388D ] SPI high-speed mode TMS320F2838x에서 지원하는 최대 SPI Clock speed는 기본적으론 12.5MHz인데 High-speed mode를 사용하면 50MHz까지 가능하다.    High-speed mode를 사용하기 위한 제약사항과 사용 방법을 알아보자.     먼저 연결 시 특정 핀 구성을 따라야만한다.     칩에 SPI 모듈이 4개있는데 각 SPI는 아래 GPIO핀 먹스 옵션을 사용해야만 High-speed SPI를 사용할 수 있다.         그리고 capacitive load 때문에 High-speed mode는 single master에 single slave 연결만 지원한다.  Reference : https://e2e.ti.com/support/microcontrollers/c2000-micr.. 2023. 11. 8.
TMS320F28388D ] 부트 과정 Reset이 일어나면 먼저 PC(Program Counter)는 Reset Vector가 fetch되어있는 0x3FFFC0으로 설정된다. Reset Vector의 내용은 Boot ROM 영역에 있는 InitBoot 코드로 점프하는 것이다. Boot ROM은 한번만 프로그래밍 가능한 영역으로 공장 출하시 TI사가 부트로더 Software를 마스킹해둔 곳인데, 여기에 부트로더 역할을 하는 InitBoot 함수가 있다. InitBoot 코드가 실행되면 부트로딩을 위한 루틴을 수행하고 I/O 핀 상태에 따라 BootMode를 결정한 뒤 BootMode에 따라 온칩 메모리의 특정 Entry Point를 실행하게 된다. 참고로 Boot ROM에 마스킹된 Boot Code는 아래 경로에서 살펴볼 수 있다. C:\ti.. 2023. 8. 16.
TMS320F28388D ] Reset Sources 유저매뉴얼의 Reset Sources 테이블 첫번째 열이 Reset Source 목록이고 첫번째 행이 각 Reset이 발생했을 때 초기화되는 여부를 표시한다. Yes인 것은 해당 회로가 리셋 된다는 뜻이고, - 는 해당회로 기존 상태로 남는다는 뜻이며, Hi-z는 하이 임피던스 상태라는 뜻이다. Power-On Reset (POR) POR 회로는 칩에 전원이 인가되고 안정된 상태에 이르기까지 칩을 계속 리셋 상태로 묶어두는 회로로, GPIO 핀들의 글리치를 억제하고, 칩이 깨끗하게 시동 될 수 있게한다. POR이 발생하면 칩의 모든 회로는 리셋상태가 되고, IO핀은 Hi-Z 상태가 되며, /XRS 핀은 Low 신호를 출력하게 된다. 이때 /XRS 핀의 출력 신호는 칩과 연결된 다른 IC 소자들을 리셋 시.. 2023. 8. 14.
TMS320F28388D ] SPI Clocking Schemes / CPOL, CPHA 설정 TMS320F2838x칩 Clock Phase 설정에는 주의할 점이있다. 우선 SPI 통신을 하려면 CPOL(Clock Polarity)과 CPHA(Clock Phase)라는 두 가지 파라미터를 설정하는데 이 설정 조합에 따라 다음의 4가지 SPI 모드가 있다. 그리고 TMS320F2838x driverlib에도 Mode 설정이 존재하는데 CPOL은 동일하지만, CPHA를 설정할 때 주의가 필요하다. 보통은 CPOL, CPHA 설정에 따라 클럭과 데이터를 동기화하는 방법은 다음과 같다. CPOL = 0: IDLE 일 때 클럭이 LOW 레벨이다. CPHA = 0 : 데이터가 클럭의 first edge에서 캡쳐(샘플링)되고, 그 다음 edge에서 전파(출력)된다. CPHA = 1 : 데이터가 클럭의 seco.. 2023. 8. 14.
TMS320F28388D ] eCAP으로 ePWM 신호 Period와 Duty Cycle 측정 특정 주파수, 듀티사이클의 PWM신호를 생성하고 eCAP으로 PWM신호 측정    PWM 설정 ePWM의 TBCLK(Time Base Clock)은 아래 공식으로 설정하는데 prescale 값은 둘 다 1로 한다. TBCLK = EPWMCLK/(HSPCLKDIV * CLKDIV) Period를 25000으로 설정하고, Counter Mode는 up-down으로 한다. 카운터가 up-dwon 모드일 때 PWM 파형의 주파수는 TBCLK/(2*period)인데 EPWMCLK는 따로 클락설정이 없으면 디폴트가 SYSCLK/2여서 100MHz니까 100,000,000 / 50,000 = 2kHz가 된다.     Counter Compare 값은 18750으로 설정.  .. 2023. 8. 14.
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 ] 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 ] phy 레지스터 읽어 link status 감지하기 lwiplib.c 파일에서 bmsr을검색하면 link status를 감지하는 방법을 알 수있다. 먼저 이더넷 initialization 를 하면 Ethernet_getHandle() 함수 안에서 phy 설정을 하고 있긴한데, 그렇게 그냥 써도 이더넷통신은 되지만 phy 칩을 직접 다루려면 바깥에서 올바른 설정값으로 다시 설정해줄 필요가 있다. #define EPHY_BMSR 0x00000001 // Ethernet PHY Basic Mode Status#define EPHY_BMSR_LINKSTAT 0x00000004 // Link Status//MDIO ConfigurationsEthernet_configureMDIO(Ethernet_device_struct.bas.. 2023. 3. 12.
변수를 특정 메모리 영역(섹션 또는 주소)에 배치하기 [공개] 특정 영역에 배치하기 MEMORY { // ... CPU1TOCPU2RAM : origin = 0x03A000, length = 0x000800 CPU2TOCPU1RAM : origin = 0x03B000, length = 0x000800 // ... } SECTIONS { // ... MSGRAM_CPU1_TO_CPU2 : > CPU1TOCPU2RAM, type=NOINIT MSGRAM_CPU2_TO_CPU1 : > CPU2TOCPU1RAM, type=NOINIT // ... } #pragma DATA_SECTION(readData, "MSGRAM_CPU1_TO_CPU2") typedef struct { uint32_t u16; float f; } test_t; test_t readData; 특정 주소.. 2023. 2. 28.
Interrupt Nesting & SW Priorization [공개] 관련문서 https://software-dl.ti.com/C2000/docs/c28x_interrupt_nesting/html/index.html C28x Interrupt Nesting In most cases a system will only require one or two interrupts to be nested. This is easily handled by the example shown previously. There is, however, an example provided by which covers possibilities for every single interrupt in the group. This example software-dl.ti.com PIE 그룹과 채널 디폴트 우선순.. 2023. 2. 25.
CANFD (MCAN) [공개] 메시지램 통해 CPU1에서 사용가능 CPU2에선 불가. MCAN이 사용하는 메시지램은 CPU1_TO_CM, CM_TO_CPU1 MSGRAM 과는 별개 송신 수신 FIFO사용해 수신시 Loss 없음 2023. 2. 25.
TMS320F28388D ] IPC 사용하여 CPU1과 CPU2 타이머 Tick 값 Synchronization CPU1 코드 // ... IPC_clearFlagLtoR(IPC_CPU1_L_CPU2_R, IPC_FLAG_ALL); IPC_sync(IPC_CPU1_L_CPU2_R, IPC_FLAG31); msTick = 0; CPUTimer_startTimer(CPUTIMER0_BASE); // ... CPU2 코드 // ... IPC_clearFlagLtoR(IPC_CPU2_L_CPU1_R, IPC_FLAG_ALL); IPC_sync(IPC_CPU2_L_CPU1_R, IPC_FLAG31); msTick = 0; CPUTimer_startTimer(CPUTIMER0_BASE); // ... 두 코어간 동기화를 위한 API인 IPC_Sync() 함수 내부는 다음과 같다. //! Synchronises the two .. 2023. 1. 26.
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 ] 멀티 코어 환경에서 디버깅하기 examples/cm 의 uart 예제를 찾아보면 CPU1(c28x) 코어가 uart config 하는 예제와 CM(ARM Cortex-M4) 코어가 uart echoback 을 수행하는 예제 두 개 가 보인다. 둘 다 import 한다. 첫 번째 예제는 CPU1이 CM의 UART 기능을 쓰기 위한 GPIO 핀 설정을 해주고 공유 주변장치를 할당해준다. // // Included Files // #include "driverlib.h" #include "device.h" void main(void) { // // Initialize device clock and peripherals // Device_init(); // // Boot CM core // #ifdef _FLASH Device_bootCM(.. 2022. 9. 14.
TMS320F28388D ] Watch Expressions (Continuous Refresh) STM32에서 Live Expression 과 같이 전역변수를 디버깅하며 실시간으로 관찰할 수 있는 기능이다. 첫번째 방법 보려고 하는 변수를 Expression 에 추가 Continuous Refresh 클릭 점 세개 누르고 Continuous Refresh Interval 클릭 최소 100ms 간격으로 refresh 되게 할 수 있다. 두번째 방법 Continuous Refresh 는 해제하고 해당 변수의 데이터가 변한 뒤 부분에 Breakpoint를 건다. (오른쪽 클릭 또는 파란 라인을 더블클릭해서 토글시킬 수 있다) 참고. Hardware Breakpoint는 CPU의 디버그 레지스터를 이용하는 방법으로 INT1을 사용한다. 속도는 빠르지만 설정할 수 있는 브레이크 포인트 개수에 한계가 있다. .. 2022. 9. 10.
CPU, MCU, MPU, DSP, FPGA 구분 On chip / SoC On chip은 하나의 IC에 제어, 연산, 입출력, 저장장치가 다 들어 있는 Stand alone 형태를 의미한다. SoC(System on Chip)과 같은 의미로 볼 수 있지만, 보통 SoC를 말하면 On chip + 특수기능을 하나의 칩에 구현하는 것을 의미한다. CPU (Central Processing Unit) CPU는 산술 및 논리 연산 유닛인 ALU(Arithmetic and Logical Unit)와 명령어를 읽어오고 해석해서 각 유닛을 제어하는 CU(Control Unit) 그리고 연산을 수행할 때 필요한 데이터를 빠르게 접근하고 처리하기 위해 사용되는 Register를 묶은 형태이다. CPU는 실행할 프로그램과 데이터, 입출력을 제어하는 역할을 하지만 I/O.. 2022. 9. 10.
TMS320F28388D ] SCI (UART) 통신하기 - 송신 SCI : Serial Commnucation Interface 직렬 통신 인터페이스로 UART보다 광범위한 개념으로 쓰이지만 그중에 주로 UART 용도로 쓴다. 새 프로젝트를 만드는 것보다 .syscfg 가 있는 예제파일을 불러와 시작하는 것이 좋다. 프로젝트를 복붙해 sci_test 라는 프로젝트를 하나 만들고 .syscfg 파일을 더블클릭해 sysconfig tool 로 들어간다. 형관펜으로 표시한 버튼을 누르면 데이터시트 11페이지에도 있는 핀 다이어그램을 볼 수 있다. F2838x는 176-pin QFP 와 337-pin BGA 패키지가 있는데 내가 사용하는 모델은 337-pin BGA이다. 그리고 그 옆의 Show Generated Files 를 누르고 File name 을 클릭하면 sysco.. 2022. 9. 7.
TMS320F28388D ] 프로젝트 복사하기 Copy와 Paste로 복붙한다. 프로젝트명을 적어 복사한다. F2키를 눌러 .c 파일과 .syscfg 파일도 프로젝트명과 동일하게 바꾼다. 이전 빌드로 생긴 CPUx_RAM 또는 CPUx_FLASH 폴더는 지워준다. 링커 설정에 아래와 같이 되어 있기 때문에 빌드하면 생성되는 실행파일(.out)포함 출력물도 프로젝트명으로 생긴다. 참고로 STM32에선 .elf 로 생성됐었다. 필요한 경우 Debug Configuration 을 수정하고 디버그한다. 2022. 9. 7.
TMS320F28388D ] 예제파일 불러오는방법 (LED Blink) C2000ware 설치 Texas Instruments 사가 개발자들을 대상으로 칩에 대해 제공하는 각종 자료들(데이터시트, 칩 매뉴얼, 기본 예제 및 소스, 라이브러리 등)이 담긴 C2000ware 를 다운로드해 설치한다. (설치 folder path : C:\ti\c2000) https://www.ti.com/tool/C2000WARE 첫번째 방법 Project explorer 에서 import - CCS Projects Browse 클릭 - C2000ware가 설치된 폴더 안의 driverlib - 디바이스명 폴더를 선택한다. 참고로 driverlib 폴더에는 HAL(Hardware Abstraction Layer) driver를 사용한 예제, device_support 폴더에는 레지스터를 조작해 .. 2022. 9. 3.
TI ] CCS (Code Composer Studio) 설치하기 + 새 프로젝트 만들기 이글은 TMS320F2838x 를 바탕으로 쓰여졌습니다. 먼저 TI 사의 DSP를 사용하기 위한 툴인 CCS를 설치한다. https://www.ti.com/tool/download/CCSTUDIO Rdcommended 인 커스텀 설치 선택 해당되는 제품군을 선택 Debug probes 선택. 필요하면 나중에 추가설치 할 수 있다. CCS를 사용하면 내장 JTAG 에뮬레이터(=Debug Probe)를 위한 FTDI Driver가 같이 설치되기 때문에 5핀 케이블로 PC와 연결을 하면 다음과 같이 장치 관리자에 뜬다. CCS 실행 실행 후 첫 화면 New CCS Project 만들기 먼저 타겟보드를 선택하고 Connection에서 맞는 Debug Probe를 선택한다. 옆의 Verify를 누르면 스캔 테스트.. 2022. 9. 3.