http://cafe.naver.com/roboticslab.cafe TMS320F2812의 GPIO의 이해
Contents 1. DSP 28x의 MMR 2. TMS320F2812의 GPIO 3. GPIO를 이용한 LED 점멸 예제
MMR (Memory Mapped Register) DSP 28x의 MMR MMR (Memory Mapped Register) 메모리처럼 조작 가능한 레지스터를 의미 수많은 레지스터의 관리를 용이하도록, 메모리 주소와 동일한 지위를 갖는 주소를 레지스터마다 부여해 쉽게 조작이 가능하도록 번지를 부여 받은 레지스터
DSP 28x의 MMR 24계열 DSP의 MMR 선언과 조작 레지스터의 비트 조작이 매우 어렵다. #define MCRA (volatile unsigned int *)0x7090 #define MCRB (volatile unsigned int *)0x7090 #define MCRC (volatile unsigned int *)0x7090 레지스터의 비트 조작이 매우 어렵다. 레지스터의 값을 통째로 바꿔야 한다. CCS의 기능을 제대로 사용하지 못한다. CCS의 왓치 윈도우에서의 비트단위 관찰 기능과 에디터에서의 자동 구문 대입 기능을 사용하지 못한다. 헤더 파일 재활용이 불가능하다. 똑같은 주변회로가 두 개 이상 쓰인 경우 불편하다.
DSP 28x의 MMR 28계열 DSP의 MMR 선언과 조작
DSP 28x의 MMR 28계열 DSP의 MMR 선언과 조작 1단계 2단계 GpioMuxRegs.GPAMUX GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 GpioMuxRegs.GPAMUX.bit.T1PWM_GPIOA6 = 1; GpioMuxRegs.GPAMUX.all = 0x0037;
DSP 28x의 MMR 28계열 DSP의 MMR 선언과 조작 #pragma 데이터를 원하는 메모리 영역에 주입하기 위해서는 #pragma 전처리기, DATA_SECTION 이라는 함수가 필요하다. 예) coeff배열을 L0영역인 0x8400번지에 배치 #pragma DATA_SECTION(coeff, “m_coeff”) Uint coeff[128];
DSP 28x의 MMR 28계열 DSP의 MMR 선언과 조작 ☞ MMR의 메모리 배치 1단계:MMR 선언 2단계:섹션 정의 extern volatile struct GPIO_MUX_REGS GpioMuxRegs; extern volatile struct GPIO_DATA_REGS GpioDataRegs; 2단계:섹션 정의 #pragma DATA_SECTION(GpioDataRegs, “GpioDataRegsFile”); #pragma DATA_SECTION(GpioMuxRegs, “GpioMuxRegsFile”); 3단계:커맨더 파일 작성
DSP 28x의 MMR 28계열 DSP의 MMR 선언과 조작 구조체의 선언의 장점 비트 조작이 용이하다. 비트단위로 접근한 구문은 컴파일러에 의해 Atomic 명령어 체계로 사용된다. 주석문 처리가 간편해진다. MMR 처리 구문 자체가 주석문이 된다. 재사용이 가능하다. 동일한 구조의 레지스터가 탑재되어 있지만, 번지가 다른 경우 데이터형을 정의한 구문을 재활용할 수 있다.
DSP 28x의 MMR MMR 보호 기능 : EALLOW, EDIS
DSP 28x의 GPIO Example_281xGpioToggle.pjt TI가 제공하는 SPRC097 이라는 기술문서와 함께 파일로 제공 C:\tidcs\c28\dsp281x\v100\DSP281x_examples MMR 선언 헤더 파일 각종 소스 코드 링커 커맨더 파일
DSP 28x의 GPIO Example_281xGpioToggle.pjt Project → Build Option에서 rts2800_ml.lib를 포함시킴 Project → Add File to Project를 통해서 포함 시킴
DSP 28x의 GPIO Example_281xGpioToggle.pjt 소스 코드 DSP281x_Defaultlsr.c DSP281x_PieCtrl.c DSP281x_PieVect.c DSP281x_CodestartBranch.asm DSP281x_GlobalVariableDefs.c DSP281x_Gpio.c DSP281x_Sysctrl.c Example_281xGpioToggle.c 인터럽트의 설정과 활용
DSP 28x의 GPIO Example_281xGpioToggle.pjt DSP281x_CodeStartBranch.asm .def – 선언용 디렉티브 .ref – 참고용 디렉티브 .sect – 섹션 디렉티브
> DSP281x_CodeStartBranch.asm 호출 DSP 28x의 GPIO Example_281xGpioToggle.pjt 28x DSP에서 코드가 실행되는 과정 : MC 모드 기준 MC 모드 설정 리셋 신호 인가 Boot Loader 실행 > DSP281x_CodeStartBranch.asm 호출 rts2800_ml.lib 실행 > main( ) 호출
DSP 28x의 GPIO Example_281xGpioToggle.pjt rts2800_ml.lib Run Time Support Library 기능 스택 확보 및 스택 포인터 설정 연산 비트 설정 데이터 초기화 DSP281x_GlobalVaiableDefs.c 데이터 섹션 정의
DSP 28x의 GPIO Example_281xGpioToggle.pjt DSP281x_SysCtrl.c 기능 Watchdog을 무력화(disable) PLLCR 레지스터를 설정, 원하는 시스템 클럭을 생성 주변회로에 공급 클럭의 주파수를 설정 주변회로에 클럭 공급 여부를 설정
DSP 28x의 GPIO GPIO 회로 구조
DSP 28x의 GPIO 281x프로세서 모듈의 LED
Example_281xGpioToggle.c DSP 28x의 GPIO Example_281xGpioToggle.c Example1
Example_281xGpioToggle.c DSP 28x의 GPIO Example_281xGpioToggle.c Example2 GPxSET 레지스터 : 이 비트가 1이면 해당 핀 의 상태가 Logic High가 됨 이 비트가 0이면, 아무런 영향이 없다. GPxCLEAR 레지스터 의 상태가 Logic Low가 됨
Example_281xGpioToggle.c DSP 28x의 GPIO Example_281xGpioToggle.c Example3 GPxTOGGLE레지스터 : 이 비트가 1이면 해당 핀 의 상태가 반전된다. 이 비트가 0이면, 아무런 영향이 없다.
Input Qualification 기능 DSP 28x의 GPIO Input Qualification 기능 6개의 포트중 A,B,D,E 포트에는 Input Qualifier라는 아주 특별한 회로가 탑재되어 있다.
Input Qualification 기능 DSP 28x의 GPIO Input Qualification 기능 GPxQUAL 레지스터
Input Qualification 기능 DSP 28x의 GPIO Input Qualification 기능 Input Qualifier의 동작
www.themegallery.com Thank You !