Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "ROBOTICS LAB. http://cafe.naver.com/roboticslab DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab."— Presentation transcript:

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

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

3 부트 과정 예 • FLASH BOOT MODE • H0 SARAM BOOT MODE • OTP BOOT MODE User
Programmed Branch to desired location SelectBootMood select jump to FLASH Reset Jump to 0x3F 7FF6 InitBoot ExitBoot • H0 SARAM BOOT MODE SelectBootMood select jump to FLASH Reset Jump to 0x3F 8000 Execution continues InitBoot ExitBoot • OTP BOOT MODE SelectBootMood select jump to FLASH Reset Jump to 0x3F 7800 Execution Preprogrammed InitBoot ExitBoot

4 부트 모드 설정

5 BOOT ROM TI가 마스킹 한 내용 (Boot ROM) : MC mode에서 활성화 Math table and
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; //Minimum cycles required to move between power states //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 수 SYSCLKOUT (MHz) SYSCLKOUT (ns)
PAGE WAIT - STATE RANDOM WAIT STATE 150 6.67 5 120 8.33 4 100 10 3 75 13.33 2 50 20 1 30 33.33 25 40 15 66.67 250

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

15 고속 플래시 프로그래밍 CMD 파일 수정 http://cafe.naver.com/roboticslab 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 = /* Should be empty with large memory model */ .ebss : > RAMH0, PAGE = 1 .const : > FLASHA, PAGE = /* Should be empty with large memory model */ .econst : > FLASHA, PAGE = 0 .stack : > RAMM1, PAGE = 1 .sysmem : > RAMM0, PAGE = /* Should be empty with large memory model */ .esysmem : > RAML1, PAGE = 1 .switch : > FLASHA, PAGE = 0 /*** User Defined Sections ***/ codestart : > BEGIN, PAGE = /* Used by file CodeStartBranch.asm */ csm_rsvd : > CSM_RSVD, PAGE = /* Used by file passwords.asm */ pie_vect : > PIE_VECT, PAGE = 1 secureRamFuncs : LOAD = FLASHA, PAGE = /* 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 결과를 어떤 방식으로 읽을 것인지? Dual Sample/Hold 회로를 어떻게 운영할 것인지? ADC 결과 저장용 버퍼를 어떻게 운용할 것인지?

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

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

31 TMS320F2812 ADC 시퀀서란? 8채널 조작 시퀀서가 2개 개발자와 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 Power 시퀀스
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

51 Address/Data Bus use to external ADC
Plan 4차 Peripherals Operation (7월 3일) Flesh Memory Control 5차 Peripherals Operation (7월 10일) ADC IQMath 6차 Application (7월 17일) Address/Data Bus use to external ADC 7차 Application (7월 24일) Step Motor Drive IR Sensor Interface

52 Thank You !


Download ppt "ROBOTICS LAB. http://cafe.naver.com/roboticslab DSP TMS320F2812 ROBOTICS LAB. http://cafe.naver.com/roboticslab."

Similar presentations


Ads by Google