하나의 mcu에 여러개의 Adc 모듈이 있고 , Adc 모듈 안에 16개의 SOC 가 있다.
SOC에서 셋팅하는 항목은
어떤 Adc pin(ch)인지,
컨버전 트리거 소스,
sampling time 이다.
그룹으로 묶어서 adc 핀들을 할당하고, 그룹단위로 컨버전하는게 aurix 컨셉인데 c2000은 핀마다 제 각각 트리거소스를 셋팅하고, 트리거 요청받은 채널들끼리 arbitration을 어떻게 할건지 정하는 컨셉이다.
트리거 소스 종류
SOC마다 트리거소스를 각각 셋팅하는건 알겠고 그래서 트리거소스 어떤것이 있냐면 종류가 굉장히 많다. 기본적으로 SW로 요청할 수 있고 그외 다양한 페리펄럴으로 부터 신호를 받는다.
ePWM으로 부터 받을수도 있고, gpio로 부터 받을수도 있다. 그 외에도 소스 종류가 굉장히 많은데 자세한 내용은 생략.
참고로 ePWM으로 부터 받는 트리거신호는 ePWM SOCA , ePWM SOCB 두종류가 있다.
그리고 이 2개의 신호는 ePWM 모듈마다 전부 별개로 존재한다.
(ePWM1 SOCA, ePWM1 SOCB, ePWM2 SOCA, ePWM2 SOCB .. 이런식)
그리고 편리한게 soc 번호와 epwm 채널 번호간에 제약사항이 따로 없다.
어떤 soc 던지 상관없이 모든 pwm 으로 트리거가 가능하다.
또한 같은 pwm 시그널을 여러개의 soc 트리거 소스로 할당도 가능하다.
만약 그렇게 쓴다면 해당 pwm 시그널이 발생되면 여러 개의 soc 에 동시에 컨버젼이 요청이 될 것이고 그 soc 끼리 서로 arbitration을 거쳐서 컨버젼이 차례차례 될 것이다.
일단 가장 기본적인 arbitrate 방식은 round robin 방식이다.
페리펄럴 초기 상태에서 가장 우선 순위 높은건 soc 0번이고, soc에 컨버젼 요청되면 라운드로빈 형태로 숫자 0부터 15 까지 돌려가면서 컨버전 하는 방식이다.
두번째로 우선순위를 주는 컨셉이 있다
근데 우선순위가 다양한건 아니고
high or 일반 2가지 뿐이다.
high인 soc 을 선정하는 것도 완전 자유로운게 아니라 soc 0번부터 몇 개까지. 이런식이다.
그러니까 우선순위가 high인 soc를 1 7 9 이렇게 자유롭게 선정하는게 아니라
0만 high
0,1 만 high
0,1 2만 high
이런식으로 정한다는거다.
암튼 high인 soc들은 라운드 로빈이 돌고있는 것과 별개로 일반 soc보다 먼저 컨버전을 한다. 일반 soc는 여전히 자기들끼리 round robin 돌린다.
그리고 high인 soc끼리 경쟁하는 경우 채널 번호 낮은게 우선이다.
세번째로 burst mode가 있다.
Burst 모드는 트리거소스 하나에 여러개의 채널을 물리는 방식이다.
앞에서 트리거소스는 soc 마다 제각각 셋팅한다고 했었는데, 사실 버스트모드를 쓰면 트리거소스 하나에 adc 핀 여러개를 매핑하는게 가능하다.
근데 이것도 제약사항이 있는데,
일단 버스트에 속하는 soc는 우선순위가 일반인 soc만 속할 수 있다.
그리고 버스트모드를 사용하면 일반 soc는 사용을 못한다.
무슨말이냐면 버스트 모드에 soc 1234를 매핑해서 쓰고, 나머지soc5 , soc6 을 제각각 사용하기. 이런게 불가능하다.
우선순위 high인 soc들 , 그리고 버스트모드
이렇게 같이 섞어쓰는건 가능하다.
근데 버스트랑 일반 soc는 사용 못한다는 소리이다.
'임베디드 쌩초보 공부 > TI - C2000 MCU' 카테고리의 다른 글
TI C2000 MCU 개발환경 개요3 최적화옵션 (1) | 2023.04.11 |
---|---|
TI C2000 시리즈 PWM 유용한 기능들 (0) | 2023.03.28 |
TI C2000 시리즈 DMA (1) | 2023.03.18 |
TI C2000 MCU 개발환경 개요 (0) | 2023.03.17 |
TI MCU C2000 시리즈 AURIX와 비교 (0) | 2023.03.14 |