550 likes | 950 Views
DSP TMS320F2812. ROBOTICS LAB. http://cafe.naver.com/roboticslab. Contents. 1. TMS320F2812 Boot. 2. TMS320F2812 Flash Control. 3. TMS320F2812 ADC. 부트 과정 예. • FLASH BOOT MODE. User Programmed Branch to desired location. SelectBootMood select jump to FLASH. Jump to 0x3F 7FF6.
E N D
DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab
Contents 1. TMS320F2812 Boot 2. TMS320F2812 Flash Control 3. TMS320F2812 ADC
부트 과정 예 • FLASH BOOT MODE User Programmed Branch to desired location SelectBootMood select jump to FLASH Jump to 0x3F 7FF6 Reset InitBoot ExitBoot • H0 SARAM BOOT MODE SelectBootMood select jump to FLASH Jump to 0x3F 8000 Execution continues Reset InitBoot ExitBoot • OTP BOOT MODE SelectBootMood select jump to FLASH Jump to 0x3F 7800 Execution Preprogrammed Reset InitBoot ExitBoot
BOOT ROM TI가 마스킹 한 내용 (Boot ROM) : MC mode에서 활성화 Selection start address On-chip boot ROM Data space Prog space 0x3F F000 Sin/Cos (644 * 16) 0x3F F502 Normalized inverse (528 * 16) Math table and Future upgrades 3K * 16 0x3F F512 Normalized square root (274 * 16) 0x3F F9E8 Normalized actan (452 * 16) 0x3F F824 Rounding and saturation (360 * 16) 0x3F FB50 Reserved 0x3F FC00 Bootloader function ROM version ROM checksum 1K * 16 0x3F FFC0 Reset vector CPU vector table (64 * 16) 0x3F FFFF
TMS320F2812 Flash 굽는 법 • On-Chip Flash Programmer
TMS320F2812 Flash 굽는 법 • CMD 파일 수정
TMS320F2812 Flash 굽는 법 • CMD 파일 수정
TMS320F2812 Flash 굽는 법 • On-Chip Flash Programmer의 사용 CCS Customize (Option → Customize… → Program/Project Load 탭)에서 Load Program After Build 옵션을 설정한 상태라면 에러메시지가 여러 번 뜰 것이다. ① Flash Promgrammer Settings… ② Clock Configuration ③ Erase Sector Selection ④ Code Security Passwords ⑤ Operation
고속 플래시 프로그래밍 • Fetch(PreFetch) • RAM은 150MHz로 동작 • Flash은 20MHz ~ 50MHz로 동작 ※ 고속 CPU가 코드나 데이터를 저속 플래시 메모리에서 Fetch 해오려면, 대기시간을 가져야만 정상적인 수행이 가능하다. 이를 플래시 파이프라인 이라는 회로로 상당부분 극복했다.
고속 플래시 프로그래밍 • void InitFlash(void) void InitFlash(void) { EALLOW; //Enable Flash Pipeline mode to improve performance //of code executed from Flash. FlashRegs.FOPT.bit.ENPIPE = 1; // CAUTION //Minimum waitstates required for the flash operating //at a given CPU rate must be characterized by TI. //Refer to the datasheet for the latest information. //Set the Random Waitstate for the Flash FlashRegs.FBANKWAIT.bit.RANDWAIT = 5; //Set the Paged Waitstate for the Flash FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5; // CAUTION //Minimum cycles required to move between power states //at a given CPU rate must be characterized by TI. //Refer to the datasheet for the latest information. //For now use the default count //Set number of cycles to transition from sleep to standby FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; //Set number of cycles to transition from standby to active FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; EDIS; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. asm(" RPT #7 || NOP"); }
고속 플래시 프로그래밍 • Flash 관련 레지스터 Flash Option (FOPT) Register Flash Waitstate (FBANKWAIT) Register Flash Standby Wait (FSTDBYWAIT) Register Flash Standby to Active Wait Counter (FACTIVEWAIT) Register
고속 플래시 프로그래밍 • CPU 속도에 따른 WAIT 수
TMS320F2812 Flash 굽는 법 • 예제 소스 • http://www.tms320blog.co.kr/online/8 • NATEON 파일방 • 설치경로 : C:\tidcs\c28\dsp281x\v100\SyncWorks_EVM H0 SARAM FLASH
고속 플래시 프로그래밍 • CMD 파일 수정 SECTIONS { /*** Compiler Required Sections ***/ /* Program memory (PAGE 0) sections */ .text : > FLASHA, PAGE = 0 .cinit : > FLASHA, PAGE = 0 .pinit : > FLASHA, PAGE = 0 .reset : > RESET, PAGE = 0, TYPE = DSECT /* We are not using the .reset section */ /* Data Memory (PAGE 1) sections */ .cio : > RAMM0, PAGE = 1 .bss : > RAMM0, PAGE = 1 /* Should be empty with large memory model */ .ebss : > RAMH0, PAGE = 1 .const : > FLASHA, PAGE = 0 /* Should be empty with large memory model */ .econst : > FLASHA, PAGE = 0 .stack : > RAMM1, PAGE = 1 .sysmem : > RAMM0, PAGE = 1 /* Should be empty with large memory model */ .esysmem : > RAML1, PAGE = 1 .switch : > FLASHA, PAGE = 0 /*** User Defined Sections ***/ codestart : > BEGIN, PAGE = 0 /* Used by file CodeStartBranch.asm */ csm_rsvd : > CSM_RSVD, PAGE = 0 /* Used by file passwords.asm */ pie_vect : > PIE_VECT, PAGE = 1 secureRamFuncs : LOAD = FLASHA, PAGE = 0 /* Used by InitFlash() in SysCtrl.c */ RUN = RAML0, PAGE = 0 LOAD_START(_secureRamFuncs_loadstart), LOAD_END(_secureRamFuncs_loadend), RUN_START(_secureRamFuncs_runstart) }
고속 플래시 프로그래밍 • 코드 수정(DSP281x_SysCtrl.c) #pragma CODE_SECTION(InitFlash, "secureRamFuncs") void InitFlash(void) { asm(" EALLOW"); // Enable EALLOW protected register access FlashRegs.FPWR.bit.PWR = 3; // Pump and bank set to active mode FlashRegs.FSTATUS.bit.V3STAT = 1; // Clear the 3VSTAT bit FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; // Sleep to standby transition cycles FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; // Standby to active transition cycles FlashRegs.FBANKWAIT.bit.RANDWAIT = 5; // Random access waitstates FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5; // Paged access waitstates FlashRegs.FOTPWAIT.bit.OTPWAIT = 5; // Random access waitstates FlashRegs.FOPT.bit.ENPIPE = 1; // Enable the flash pipeline asm(" EDIS"); // Disable EALLOW protected register access /*** Force a complete pipeline flush to ensure that the write to the last register configured occurs before returning. Safest thing is to wait 8 full cycles. ***/ asm(" RPT #7 || NOP"); }
고속 플래시 프로그래밍 • 코드 수정 • main(){} • DSP281x_Examples.h /*** Copy all FLASH sections that need to run from RAM (use memcpy() from RTS library) ***/ // Section secureRamFuncs contains user defined code that runs from CSM secured RAM memcpy( &secureRamFuncs_runstart, &secureRamFuncs_loadstart, &secureRamFuncs_loadend - &secureRamFuncs_loadstart); /*** Initialize the FLASH ***/ InitFlash(); // Include files not used with DSP/BIOS #ifndef DSP28_BIOS #include "DSP281x_DefaultISR.h" #endif extern Uint16 secureRamFuncs_loadstart; extern Uint16 secureRamFuncs_loadend; extern Uint16 secureRamFuncs_runstart;
고속 플래시 프로그래밍 • 실행결과 H0 SARAM FLASH 고속 FLASH Control
TMS320F2812 ADC 구조 • 281x ADC의 특징(1) • 두 개의 S/H가 탑재된, 파이프라인 방식(4 Stage)의 12-bit ADC • Simultaneous sampling, Sequential sampling modes • 입력 허용 전압: 0V ~ 3V • 최대 12.5 MSPS • 샘플/홀드의 신호 획득 시간(S/H acquisition time window) 조절용 클럭 분주 회로 탑재 • 아날로그 먹스가 탑재된 16 채널 입력 • 16개의 결과 저장용 버퍼(ADCRESULT0~15) • 두 가지 인터럽트 모드 제공 • every end of sequence(EOS): 시퀀서 동작 매 완료 시 마다 • every other EOS: 시퀀서 동작 매 두 번째 완료 시 마다
TMS320F2812 ADC 구조 • 281x ADC의 특징(2) • 오토 시퀀서 탑재 • 최대 16채널 순서 임의 조정(cascaded mode) • Event Manager A,B와 각각 연계 가능(dual sequencer mode) • 연속 동작 모드 • 단일 동작(Start/Stop) 모드 • Sequencer override mode enhancement • ADCRESULT버퍼를 16레벨 FIFO로 사용 • 다양한 트리거 모드 진원: Start of Conversion(SOC) • S/W - software immediate start • EVA - Event manager A(multiple event sources within EVA) • EVB - Event manager b(multiple event sources within EVB) • External pin
TMS320F2812 ADC 구조 • 파이프라인 방식 ADC의 특징 • 각 단(Stage)의 일괄(Concurrent)동작으로 고속 변환 가능 • 고주파 신호에 대한 광범위한 Dynamic Range 제공 가능 • 파이프라인이 꽉 차기 전의 데이터는 의미 없음 • 지연발생: 프로그래밍 시 주의 필요 • 각 스테이지의 ADC방식은 연속근사방식(Successive Approximation Register ADC)
TMS320F2812 ADC • ADC를 사용하기 위해서 • 몇 개 채널? • 어떤 순서? • 변환 시간? • 추가해서 • ADC를 어떻게 시작할 것인지? • 샘플링 주기는 어떻게? • ADC 상태는 어떠한지? • ADC 결과를 어떤 방식으로 읽을 것인지? • Dual Sample/Hold 회로를 어떻게 운영할 것인지? • ADC 결과 저장용 버퍼를 어떻게 운용할 것인지?
TMS320F2812 ADC • ADC의 MMR 변환 채널 수 및 변환 순서 설정 결과 저장용 버퍼
TMS320F2812 ADC • ADCMAXCONV • Cascaded mode • ADCMAXCONV[3..0]; MAXCONV1_X, X=0, 1, 2, 3 • ex) SEQ에서 15채널 변환한다면? • 답: ADCMAXCONV = 0X000E • Dual Sequencer mode • SEQ1 = ADCMAXCONV[2..0]; MAXCONV1_X, X=0, 1, 2 • SEQ2 = ADCMAXCONV[6..4]; MAXCONV2_X, X=0, 1, 2 • ex) SEQ1에 3채널 변환, SEQ2에서 6채널 변환한다면? • 답: ADCMAXCONV = 0X0052
TMS320F2812 ADC • ADCCHSELSEQ1~4 • 각각 4비트로 구분 채널 지정: CONVnn • 채널 변환 순서: • CONV00 > CONV01 > CONV02 > … > CONV15 ex) Cascaded 모드로 다음과 같이 순서로 채널을 변환하고자 한다. ADCINA7 → ADCINA6 → ADCINA0 → ADCINA1 → ADCINA0 → ADCINA2 → ADCINA0 → ADCINA1 → ADCINA0 → ADCINA2 ADCMAXCONV 레지스터와 ADCCHSELSEQx 레지스터 값을 설정하시오. • ADCMAXCONV = 0x0009 • ADCCHSELSEQ1 = 0x1067 • ADCCHSELSEQ2 = 0x9820 • ADCCHSELSEQ1 = 0xXXA8
TMS320F2812 ADC • 샘플링 주기: SOC(Start of Conversion)의 주기적 발생 • ADC의변환 시간과 상관없음. • 단, Continuous Run Mode 에서는 ADC 자체 변환 시간이 샘플링 주기 결정 • 예1) 10KHz로 샘플링 • Event Manager의 주기 이벤트를 이용해서 10KHz 주기로 SOC 발생 • 예2) ADCTRL1.6의 CONT_RUN 비트 설정 • ADC 변환 시간(시퀀서 한 세트): 샘플링 주기
TMS320F2812 ADC • 변환 시간(속도) • ADC 모듈이 S/H에 샘플링된 아날로그 신호를 디지털 신호(PCM 데이터)로 변환하는 시간 • ADC회로 구동 클럭이 변환 시간 결정 SYSCLKOUT HISCLK OSCCLK CLKIN High-Speed Peripheral clock Prescaler HISPCP[2:0] OSC 30MHz PLL PLLCR[3:0] 28x CPU SOC pulse Generator (ACQ_PS[3:0]) ADCRL[11:8] CPS (x1/2 when 1, x1 when 0) ADCTRL[7] 4-bit Clock Divider ADCTRL[4:1] 4bit divided clock S/H Clock pulse ADCCLK
TMS320F2812 ADC • 변환 속도 계산 • 변환 속도가 7.5MHz로 설정되었다 하더라도,SOC의 발생 주기가 10KHz 이면, 샘플링 주기(rate)는? 10KHz
TMS320F2812 ADC • ADC 구동 클럭을 높이면 • Aliasing이 줄어든다. • 채널간 오차(cross-talk)가 커진다. • 이 오차는 샘플링 윈도우를 키운다고 줄어드는 성질의 것이 아니다. • ADC 구동 클럭을 낮추면 • Aperture Error가 커진다. 주의 1: 구동 클럭과 샘플링 rate은 별개 • 1KHz로 샘플링을 하더라도, ADC 구동 클럭은 25MHz가 가능하다. 주의 2: 281x ADC의 최고 구동 클럭은 25MHz • 분주 부주의로 25MHz이상의 클럭이 공급되면, 결과는 엉망이다.
TMS320F2812 ADC • 시퀀서란? • 개발자와 ADC를 연결하는 매개체 • 채널 변환 순차 설정이 주된 동작 • 개발자가 시퀀서에 기동 신호를 전달하면, 시퀀서가 ADC회로를 적절히 기동 • 시퀀서 설정 완료 인터럽트 발생 가능 • 다채널 조작 용기 • 8채널 조작 시퀀서가 2개 • SEQ1: ADCINA0~7 → S/H-A • SEQ1: ADCINB0~7 → S/H-B • 16채널 조작 단일 시퀀서로도 운용 가능(Cascaded 모드)
TMS320F2812 ADC • 시퀀서의 잇점 • Multi-rate System 구현 용이 • 로봇과 같은 Multi Sensors System 구현 용이 • 고속 샘플링 지원 용이 • 12.5MHz 샘플링: 샘플링당 12개의 명령어 처리 • 블록 샘플링: • 최고 16회 혹은 16채널 변환을 1블록으로 • 시퀀서 완료 주기는 약 780KHz(12.5MHz/16) • 인터럽트 처리 가능 / 알고리즘 처리 여유 • 주변 회로 연계 구동 능력 • 초기 설정만으로 ADC 구동 가능 • 타이머 주기 이벤트를 이용한 ADC 기동 • 유연한 ADC 기동과 결과 처리 가능
TMS320F2812 ADC • ADC 과정 블록 애니메이션
TMS320F2812 ADC • 시퀀서: Cascaded(직렬) 모드
TMS320F2812 ADC • 시퀀서: Dual Sequencers(병렬) 모드
TMS320F2812 ADC • 281x ADC의 내부 레퍼런스 회로 이용법
TMS320F2812 ADC • DSP281x_Adc.c의 전원 관련 코드
TMS320F2812 ADC • ADCTRL3 레지스터의 이해(1) • ADCTRL3.8: EXTREF • 0: 내부 레퍼런스 회로 사용 • Power 시퀀스 • ADCBGRFDN[1:0]: Bandgap & Reference Power Down(=0)
TMS320F2812 ADC • 파워 레벨에 따른 ADC 운영 팁
TMS320F2812 ADC • ADC 상태: ADCST
TMS320F2812 ADC • 시퀀서 상태: ADCASEQSR
TMS320F2812 ADC • ADCTRL1
TMS320F2812 ADC • ADCTRL1
TMS320F2812 ADC • ADCTRL2
TMS320F2812 ADC • 인터럽트 모드 - 1
TMS320F2812 ADC • 인터럽트 모드 - 2
TMS320F2812 ADC • 12비트 결과 저장
TMS320F2812 ADC • 결과 저장 순서
TMS320F2812 ADC • Sequential Sampling Mode
TMS320F2812 ADC • Simultaneous Sampling Mode