1 / 52

DSP TMS320F2812

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.

reegan
Télécharger la présentation

DSP TMS320F2812

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab

  2. Contents 1. TMS320F2812 Boot 2. TMS320F2812 Flash Control 3. TMS320F2812 ADC

  3. 부트 과정 예 • 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

  4. 부트 모드 설정

  5. 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

  6. TMS320F2812 Flash 굽는 법 • On-Chip Flash Programmer

  7. TMS320F2812 Flash 굽는 법 • CMD 파일 수정

  8. TMS320F2812 Flash 굽는 법 • CMD 파일 수정

  9. 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

  10. 고속 플래시 프로그래밍 • Fetch(PreFetch) • RAM은 150MHz로 동작 • Flash은 20MHz ~ 50MHz로 동작 ※ 고속 CPU가 코드나 데이터를 저속 플래시 메모리에서 Fetch 해오려면, 대기시간을 가져야만 정상적인 수행이 가능하다. 이를 플래시 파이프라인 이라는 회로로 상당부분 극복했다.

  11. 고속 플래시 프로그래밍 • 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"); }

  12. 고속 플래시 프로그래밍 • Flash 관련 레지스터 Flash Option (FOPT) Register Flash Waitstate (FBANKWAIT) Register Flash Standby Wait (FSTDBYWAIT) Register Flash Standby to Active Wait Counter (FACTIVEWAIT) Register

  13. 고속 플래시 프로그래밍 • CPU 속도에 따른 WAIT 수

  14. TMS320F2812 Flash 굽는 법 • 예제 소스 • http://www.tms320blog.co.kr/online/8 • NATEON 파일방 • 설치경로 : C:\tidcs\c28\dsp281x\v100\SyncWorks_EVM H0 SARAM FLASH

  15. 고속 플래시 프로그래밍 • 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) }

  16. 고속 플래시 프로그래밍 • 코드 수정(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"); }

  17. 고속 플래시 프로그래밍 • 코드 수정 • 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;

  18. 고속 플래시 프로그래밍 • 실행결과 H0 SARAM FLASH 고속 FLASH Control

  19. 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: 시퀀서 동작 매 두 번째 완료 시 마다

  20. 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

  21. TMS320F2812 ADC 구조 • 파이프라인 방식 ADC의 특징 • 각 단(Stage)의 일괄(Concurrent)동작으로 고속 변환 가능 • 고주파 신호에 대한 광범위한 Dynamic Range 제공 가능 • 파이프라인이 꽉 차기 전의 데이터는 의미 없음 • 지연발생: 프로그래밍 시 주의 필요 • 각 스테이지의 ADC방식은 연속근사방식(Successive Approximation Register ADC)

  22. TMS320F2812 ADC 구조

  23. TMS320F2812 ADC • ADC를 사용하기 위해서 • 몇 개 채널? • 어떤 순서? • 변환 시간? • 추가해서 • ADC를 어떻게 시작할 것인지? • 샘플링 주기는 어떻게? • ADC 상태는 어떠한지? • ADC 결과를 어떤 방식으로 읽을 것인지? • Dual Sample/Hold 회로를 어떻게 운영할 것인지? • ADC 결과 저장용 버퍼를 어떻게 운용할 것인지?

  24. TMS320F2812 ADC • ADC의 MMR 변환 채널 수 및 변환 순서 설정 결과 저장용 버퍼

  25. 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

  26. 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

  27. TMS320F2812 ADC • 샘플링 주기: SOC(Start of Conversion)의 주기적 발생 • ADC의변환 시간과 상관없음. • 단, Continuous Run Mode 에서는 ADC 자체 변환 시간이 샘플링 주기 결정 • 예1) 10KHz로 샘플링 • Event Manager의 주기 이벤트를 이용해서 10KHz 주기로 SOC 발생 • 예2) ADCTRL1.6의 CONT_RUN 비트 설정 • ADC 변환 시간(시퀀서 한 세트): 샘플링 주기

  28. 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

  29. TMS320F2812 ADC • 변환 속도 계산 • 변환 속도가 7.5MHz로 설정되었다 하더라도,SOC의 발생 주기가 10KHz 이면, 샘플링 주기(rate)는? 10KHz

  30. TMS320F2812 ADC • ADC 구동 클럭을 높이면 • Aliasing이 줄어든다. • 채널간 오차(cross-talk)가 커진다. • 이 오차는 샘플링 윈도우를 키운다고 줄어드는 성질의 것이 아니다. • ADC 구동 클럭을 낮추면 • Aperture Error가 커진다. 주의 1: 구동 클럭과 샘플링 rate은 별개 • 1KHz로 샘플링을 하더라도, ADC 구동 클럭은 25MHz가 가능하다. 주의 2: 281x ADC의 최고 구동 클럭은 25MHz • 분주 부주의로 25MHz이상의 클럭이 공급되면, 결과는 엉망이다.

  31. TMS320F2812 ADC • 시퀀서란? • 개발자와 ADC를 연결하는 매개체 • 채널 변환 순차 설정이 주된 동작 • 개발자가 시퀀서에 기동 신호를 전달하면, 시퀀서가 ADC회로를 적절히 기동 • 시퀀서 설정 완료 인터럽트 발생 가능 • 다채널 조작 용기 • 8채널 조작 시퀀서가 2개 • SEQ1: ADCINA0~7 → S/H-A • SEQ1: ADCINB0~7 → S/H-B • 16채널 조작 단일 시퀀서로도 운용 가능(Cascaded 모드)

  32. TMS320F2812 ADC • 시퀀서의 잇점 • Multi-rate System 구현 용이 • 로봇과 같은 Multi Sensors System 구현 용이 • 고속 샘플링 지원 용이 • 12.5MHz 샘플링: 샘플링당 12개의 명령어 처리 • 블록 샘플링: • 최고 16회 혹은 16채널 변환을 1블록으로 • 시퀀서 완료 주기는 약 780KHz(12.5MHz/16) • 인터럽트 처리 가능 / 알고리즘 처리 여유 • 주변 회로 연계 구동 능력 • 초기 설정만으로 ADC 구동 가능 • 타이머 주기 이벤트를 이용한 ADC 기동 • 유연한 ADC 기동과 결과 처리 가능

  33. TMS320F2812 ADC • ADC 과정 블록 애니메이션

  34. TMS320F2812 ADC • 시퀀서: Cascaded(직렬) 모드

  35. TMS320F2812 ADC • 시퀀서: Dual Sequencers(병렬) 모드

  36. TMS320F2812 ADC • 281x ADC의 내부 레퍼런스 회로 이용법

  37. TMS320F2812 ADC • DSP281x_Adc.c의 전원 관련 코드

  38. TMS320F2812 ADC • ADCTRL3 레지스터의 이해(1) • ADCTRL3.8: EXTREF • 0: 내부 레퍼런스 회로 사용 • Power 시퀀스 • ADCBGRFDN[1:0]: Bandgap & Reference Power Down(=0)

  39. TMS320F2812 ADC • 파워 레벨에 따른 ADC 운영 팁

  40. TMS320F2812 ADC • ADC 상태: ADCST

  41. TMS320F2812 ADC • 시퀀서 상태: ADCASEQSR

  42. TMS320F2812 ADC • ADCTRL1

  43. TMS320F2812 ADC • ADCTRL1

  44. TMS320F2812 ADC • ADCTRL2

  45. TMS320F2812 ADC • 인터럽트 모드 - 1

  46. TMS320F2812 ADC • 인터럽트 모드 - 2

  47. TMS320F2812 ADC • 12비트 결과 저장

  48. TMS320F2812 ADC • 결과 저장 순서

  49. TMS320F2812 ADC • Sequential Sampling Mode

  50. TMS320F2812 ADC • Simultaneous Sampling Mode

More Related