본문 바로가기

임베디드 쌩초보 공부/TI - C2000 MCU11

c2000 F28p65 메모리 특이사항 특이사항1 램영역중에 core에 dedicated한게 있고 둘다 접근 가능한 램이 있다. 근데 특이한건 이런 공용 램중에 특정 영역은 물리적으로는 하나의 메모리인데 cpu별로 접근하는 주소가 다른 영역이 있으니 주의요망. 특이사항2 메모리 주소에 매핑되는 메모리가 1byte가 아니라 2byte다. 그래서 레지스터 사이즈가 4byte인데 주소 offset은 4가 아니라 2가 된다. 2024. 1. 9.
C2000 링커와 섹션 (.cmd파일) https://software-dl.ti.com/ccs/esd/documents/c2000_c28x-compiler-understanding-linking.html C2000의 IDE인 CCS (Code Composer Studio)에서는 링커스크립트 파일의 확장자가 특이하게도 .cmd이다. >> 빌드결과 생성 된 섹션을 적절히 쪼개서 할당하도록 함 > 는 섹션을 쪼개지않고 선언된 메모리 중에 가능한곳 찾아서 할당 2023. 6. 25.
C2000 multicore 개요2 IPC https://software-dl.ti.com/C2000/docs/C2000_Multicore_Development_User_Guide/ipc_communication.html 굳이 내 설명안봐도 위 링크에 잘쓰여있음 IPC는 코어 간 통신을 위해 존재하는 별도의 패리펄럴인데 Inter Processor Communication의 약자다.CPU간에 서로 정보전달을 위한 플래그 레지스터가 위와 같이 5개 존재함. 이 레지스터는 CPU마다 별도로 존재함. 각 레지스터는 32Bit니까 각각의 레지스터 내부에는 32개의 플래그가 존재함. 이 플래그들은 유저가 적절히 활용하면되는데 CPU1이 CPU2에게 정보전달하는 예시를 생각해보자. CPU1이 CPU1의 IPCSET 레지스터 플래그를 Set하면 , CPU2의.. 2023. 6. 19.
C2000 Multicore 개요 1 https://software-dl.ti.com/C2000/docs/C2000_Multicore_Development_User_Guide/index.html# 위 링크에 설명 잘돼있음. 기본적으로 특이사항은 TI는 CPU 번호를 붙일때 CPU0 부터 시작하지 않는다. 그러므로 멀티코어의 경우 각각 CPU1 , CPU2라고 지칭한다. 또한, CCS나 Sysconfig에서 프로젝트를 만들때 CPU별로 별도의 프로젝트를 생성한다. 따라서 빌드도 CPU 별로 별개로하고, Output 파일도 별개로 존재한다. 그러니까 다운로드도 각각 해줘야한다. 대부분의 패리펄럴들은 CPU1과 CPU2에서 모두 컨트롤이 가능한데, 그렇다고 둘다 동시에 사용 가능한건 아니고 각각 제어 주체를 정해줘야한다. 예를 들어 ePWM1은 .. 2023. 6. 16.
T1 F28xx 인터럽트 처리 관련 꼭 알아야 할 유의사항! 페리펄럴 인터럽트가 한번 발생되고나서 그 뒤에도 인터럽트를 계속해서 발생시키고 싶다면 ISR 마지막에 PIE그룹의 Ack를 유저가 클리어해줘야 한다. 또한 대부분의 패리펄럴들은 유저가 별도로 패리펄럴에서 발생된 인터럽트 플래그를 clear 해줘야 다음 인터럽트도 발생이 가능하다. 그래서 유저 ISR에서 보통 마지막에 해당 패리펄럴의 인터럽트 플래그를 Clear하는 코드와 PIEACK를 지우는 코드를 넣어서 마무리한다.인터럽트들의 우선순위가 유저 configure 하지 않고 사전에 고정되서 정해져있다. 레퍼런스 매뉴얼에서 확인이 가능함. 그룹이라는 개념이 있다. 각각의 인터럽트는 하나의 그룹에 속한다. 그룹간에도 우선순위가 존재한다. Interrupt Status Flag , En.. 2023. 4. 21.
TI C2000 MCU 개발환경 개요3 최적화옵션 TI사에서 제공하는 C2000 ware 함수 내부에는 디버깅 목적의 코드가 들어가있다. 근데 이건 개발과정에서만 쓰면 되는건데 이게 들어가있어서 코드 실행속도가 느려지게 된다. 그래서 이걸 빌드 할 때 빌드에서 제외시킬 수 있도록 조치를 해놨다. 해당 디버깅코드는 #ifdef DEBUG 라는 문장으로 묶여있기 때문이다. 그래서 DEBUG를 define하지않고 빌드하면 된다. 근데 CCS 툴의 디폴트 빌드 컨피규레이션을 보면 Predefinesymbol 쪽에 DEBUG가 이미 Define 되어있다. 이부분을 삭제하거나 DEBUG가 아닌 다른 단어로 수정해서 빌드하면 된다. 그리고, 디폴트 프로젝트의 경우 컴파일러 최적화 옵션이 제대로 셋팅이 안돼있다. 이 부분 감안해서 적절한 레벨로 선택해주면 코드 사이즈.. 2023. 4. 11.
TI C2000 시리즈 PWM 유용한 기능들 LINK 기능이 있다. 간단히 예를 들면 Pwm1 의 Time Period 레지스터에 값을 셋팅하면 그와 동시에 자동으로 PWM2 , PWM3 , PWM4의 레지스터도 셋팅 시킬 수 있는 그런 기능이다. Period 관련 레지스터, Duty 출력관련 레지스터 등 다양한 레지스터에 링크 기능적용이 가능하다. pwm 타이머 레지스터 동기화 pwm 의 syncin 이라는 신호를 입력 받아서 해당신호가 발생했을때 타이머 값을 지정된 값으로 셋팅 할 수 있다. syncin에서 선택 가능한 소스가 몇가지 있는데 대표적인건 pwmsyncout 신호이다. 이것은 다른 pwm이 출력하는 syncout 신호인데, 예를 들면 해당 pwm의 타이머값이 0에 도달했을때 발생시킬 수 있다. 만약 pwm1의 syncout신호를 타.. 2023. 3. 28.
TI c2000 시리즈 Adc 컨셉 하나의 mcu에 여러개의 Adc 모듈이 있고 , Adc 모듈 안에 16개의 SOC 가 있다. SOC에서 셋팅하는 항목은 어떤 Adc pin(ch)인지, 컨버전 트리거 소스, sampling time 이다. 그룹으로 묶어서 adc 핀들을 할당하고, 그룹단위로 컨버전하는게 aurix 컨셉인데 c2000은 핀마다 제 각각 트리거소스를 셋팅하고, 트리거 요청받은 채널들끼리 arbitration을 어떻게 할건지 정하는 컨셉이다.트리거 소스 종류 SOC마다 트리거소스를 각각 셋팅하는건 알겠고 그래서 트리거소스 어떤것이 있냐면 종류가 굉장히 많다. 기본적으로 SW로 요청할 수 있고 그외 다양한 페리펄럴으로 부터 신호를 받는다. ePWM으로 부터 받을수도 있고, gpio로 부터 받을수도 있다. 그 외에도 소스 종류가 .. 2023. 3. 21.
TI C2000 시리즈 DMA 6개의 DMA 채널이 존재하고 모두 독립적으로 configure하여 사용. 6개 채널중 5개는 우선순위가 동등한데, 채널1번만 우선순위를 높게 설정이 가능함 각 채널마다 DMA Transfer를 trigger하는 소스를 설정하게 돼있음. (ex. ADC 인터럽트 시그널) (혹은 GPIO로 부터 트리거 받을 수도 있음) 이러한 페리펄럴으로부터 트리거 받는 것 외에 SW적으로 트리거하는 것도 가능함 DMACHSRC 레지스터에서 트리거소스를 선택. 2023. 3. 18.