270 likes | 638 Views
http://cafe.naver.com/roboticslab.cafe. TMS320F2812 의 GPIO 의 이해. Contents. 1. DSP 28x 의 MMR. 2. TMS320F2812 의 GPIO. 3. GPIO 를 이용한 LED 점멸 예제. DSP 28x 의 MMR. MMR (Memory Mapped Register) 메모리처럼 조작 가능한 레지스터를 의미
E N D
http://cafe.naver.com/roboticslab.cafe TMS320F2812의 GPIO의 이해
Contents 1. DSP 28x의 MMR 2. TMS320F2812의 GPIO 3. GPIO를 이용한 LED 점멸 예제
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단계 • GpioMuxRegs.GPAMUX • 2단계 • 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 선언 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 • 몇몇 특정 영역에 위치한 MMR에 일종의 보호막을 씌워 임의의 접근으로부터 보호하고 있다.
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 – 섹션 디렉티브
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
DSP 28x의 GPIO • Example_281xGpioToggle.c • Example1
DSP 28x의 GPIO • Example_281xGpioToggle.c • Example2 • GPxSET 레지스터 • : 이 비트가 1이면 해당 핀 • 의 상태가 Logic High가 됨 • 이 비트가 0이면, 아무런 • 영향이 없다. • GPxCLEAR 레지스터 • : 이 비트가 1이면 해당 핀 • 의 상태가 Logic Low가 됨 • 이 비트가 0이면, 아무런 • 영향이 없다.
DSP 28x의 GPIO • Example_281xGpioToggle.c • Example3 • GPxTOGGLE레지스터 • : 이 비트가 1이면 해당 핀 • 의 상태가 반전된다. • 이 비트가 0이면, 아무런 • 영향이 없다.
DSP 28x의 GPIO • Input Qualification 기능 • 6개의 포트중 A,B,D,E 포트에는 Input Qualifier라는 아주 특별한 회로가 탑재되어 있다.
DSP 28x의 GPIO • Input Qualification 기능 • GPxQUAL 레지스터
DSP 28x의 GPIO • Input Qualification 기능 • Input Qualifier의 동작
www.themegallery.com Thank You !