DSP TMS320F2812(4차)
Download
Report
Transcript DSP TMS320F2812(4차)
DSP TMS320F2812
ROBOTICS LAB.
http://cafe.naver.com/roboticslab
Contents
1. TMS320F2812 Boot
2. TMS320F2812 Flash Control
3. TMS320F2812 ADC
http://cafe.naver.com/roboticslab
부트 과정 예
• FLASH BOOT MODE
Reset
InitBoot
SelectBootMood
select jump
to FLASH
ExitBoot
Jump to
0x3F 7FF6
User
Programmed
Branch to
desired
location
ExitBoot
Jump to
0x3F 8000
Execution
continues
ExitBoot
Jump to
0x3F 7800
Execution
Preprogrammed
• H0 SARAM BOOT MODE
Reset
InitBoot
SelectBootMood
select jump
to FLASH
• OTP BOOT MODE
Reset
InitBoot
SelectBootMood
select jump
to FLASH
http://cafe.naver.com/roboticslab
부트 모드 설정
http://cafe.naver.com/roboticslab
BOOT ROM
TI가 마스킹 한 내용 (Boot ROM) : MC mode에서 활성화
On-chip boot ROM
Data space
Prog space
Sin/Cos
(644 * 16)
Math table and
Future upgrades
3K * 16
Normalized inverse
(528 * 16)
Normalized square root
(274 * 16)
Normalized actan
(452 * 16)
Rounding and saturation
(360 * 16)
Reserved
1K * 16
Bootloader function
ROM version
ROM checksum
Reset vector
CPU vector table
(64 * 16)
Selection start
address
0x3F F000
0x3F F502
0x3F F512
0x3F F9E8
0x3F F824
0x3F FB50
0x3F FC00
0x3F FFC0
0x3F FFFF
http://cafe.naver.com/roboticslab
TMS320F2812 Flash 굽는 법
On-Chip Flash Programmer
http://cafe.naver.com/roboticslab
TMS320F2812 Flash 굽는 법
CMD 파일 수정
http://cafe.naver.com/roboticslab
TMS320F2812 Flash 굽는 법
CMD 파일 수정
http://cafe.naver.com/roboticslab
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
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
Fetch(PreFetch)
RAM은 150MHz로 동작
Flash은 20MHz ~ 50MHz로 동작
※ 고속 CPU가 코드나 데이터를 저속 플래시 메모리에서 Fetch 해오려면, 대기시간을 가져야만 정상적인
수행이 가능하다. 이를 플래시 파이프라인 이라는 회로로 상당부분 극복했다.
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
void InitFlash(void)
//For now use the default count
//Set number of cycles to transition from sleep to standby
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
void InitFlash(void)
{
EALLOW;
//Enable Flash Pipeline mode to improve performance
//of code executed from Flash.
FlashRegs.FOPT.bit.ENPIPE = 1;
//Set number of cycles to transition from standby to active
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
EDIS;
//
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;
//Force a pipeline flush to ensure that the write to
//the last register configured occurs before returning.
}
asm(" RPT #7 || NOP");
//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.
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
Flash 관련 레지스터
Flash Option (FOPT) Register
Flash Waitstate (FBANKWAIT) Register
Flash Standby Wait (FSTDBYWAIT) Register
Flash Standby to Active Wait Counter (FACTIVEWAIT) Register
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
CPU 속도에 따른 WAIT 수
SYSCLKOUT (MHz) SYSCLKOUT (ns)
PAGE WAIT - STATE
RANDOM WAIT STATE
150
6.67
5
5
120
8.33
4
4
100
10
3
3
75
13.33
2
2
50
20
1
1
30
33.33
1
1
25
40
0
1
15
66.67
0
1
4
250
0
1
http://cafe.naver.com/roboticslab
TMS320F2812 Flash 굽는 법
예제 소스
http://www.tms320blog.co.kr/online/8
NATEON 파일방
설치경로 :
C:\tidcs\c28\dsp281x\v100\SyncWorks_EVM
H0 SARAM
FLASH
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
CMD 파일 수정
SECTIONS
{
/*** Compiler Required Sections ***/
/* Program memory (PAGE 0) sections */
.text
: > FLASHA,
.cinit
: > FLASHA,
.pinit
: > FLASHA,
.reset
: > RESET,
/* Data Memory (PAGE 1) sections */
.cio
: > RAMM0,
.bss
: > RAMM0,
.ebss
: > RAMH0,
.const
: > FLASHA,
.econst
: > FLASHA,
.stack
: > RAMM1,
.sysmem
: > RAMM0,
.esysmem
: > RAML1,
.switch
: > FLASHA,
}
PAGE
PAGE
PAGE
PAGE
=
=
=
=
0
0
0
0, TYPE = DSECT
PAGE
PAGE
PAGE
PAGE
PAGE
PAGE
PAGE
PAGE
PAGE
=
=
=
=
=
=
=
=
=
1
1
1
0
0
1
1
1
0
/*** User Defined Sections ***/
codestart
: > BEGIN,
PAGE = 0
csm_rsvd
: > CSM_RSVD,
PAGE = 0
pie_vect
: > PIE_VECT,
PAGE = 1
secureRamFuncs :
LOAD = FLASHA, PAGE = 0
RUN = RAML0, PAGE = 0
LOAD_START(_secureRamFuncs_loadstart),
LOAD_END(_secureRamFuncs_loadend),
RUN_START(_secureRamFuncs_runstart)
/* We are not using the .reset section */
/* Should be empty with large memory model */
/* Should be empty with large memory model */
/* Should be empty with large memory model */
/* Used by file CodeStartBranch.asm */
/* Used by file passwords.asm */
/* Used by InitFlash() in SysCtrl.c */
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
코드 수정(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;
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;
FlashRegs.FOTPWAIT.bit.OTPWAIT = 5;
FlashRegs.FOPT.bit.ENPIPE = 1;
//
//
//
//
//
//
//
Clear the 3VSTAT bit
Sleep to standby transition cycles
Standby to active transition cycles
Random access waitstates
Paged access waitstates
Random access waitstates
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");
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
코드 수정
main(){}
/*** 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();
DSP281x_Examples.h
// 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;
http://cafe.naver.com/roboticslab
고속 플래시 프로그래밍
실행결과
H0 SARAM
FLASH
고속 FLASH Control
http://cafe.naver.com/roboticslab
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: 시퀀서 동작 매 두 번째 완료 시 마다
http://cafe.naver.com/roboticslab
TMS320F2812 ADC 구조
281x ADC의 특징(2)
오토 시퀀서 탑재
Sequencer override mode enhancement
최대 16채널 순서 임의 조정(cascaded mode)
Event Manager A,B와 각각 연계 가능(dual sequencer mode)
연속 동작 모드
단일 동작(Start/Stop) 모드
ADCRESULT버퍼를 16레벨 FIFO로 사용
다양한 트리거 모드 진원: Start of Conversion(SOC)
S/W
EVA
EVB
External pin
- software immediate start
- Event manager A(multiple event sources within EVA)
- Event manager b(multiple event sources within EVB)
http://cafe.naver.com/roboticslab
TMS320F2812 ADC 구조
파이프라인 방식 ADC의 특징
각 단(Stage)의 일괄(Concurrent)동작으로 고속 변환 가능
고주파 신호에 대한 광범위한 Dynamic Range 제공 가능
파이프라인이 꽉 차기 전의 데이터는 의미 없음
지연발생: 프로그래밍 시 주의 필요
각 스테이지의 ADC방식은 연속근사방식(Successive Approximation Register ADC)
http://cafe.naver.com/roboticslab
TMS320F2812 ADC 구조
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADC를 사용하기 위해서
3.
몇 개 채널?
어떤 순서?
변환 시간?
추가해서
1.
2.
ADC를 어떻게 시작할 것인지?
샘플링 주기는 어떻게?
ADC 상태는 어떠한지?
ADC 결과를 어떤 방식으로 읽을 것인지?
Dual Sample/Hold 회로를 어떻게 운영할 것인지?
ADC 결과 저장용 버퍼를 어떻게 운용할 것인지?
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADC의 MMR
변환 채널 수 및
변환 순서 설정
결과 저장용 버퍼
http://cafe.naver.com/roboticslab
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
http://cafe.naver.com/roboticslab
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
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
샘플링 주기: SOC(Start of Conversion)의 주기적 발생
ADC의 변환 시간과 상관없음.
단, Continuous Run Mode 에서는 ADC 자체 변환 시간이
샘플링 주기 결정
예1) 10KHz로 샘플링
Event Manager의 주기 이벤트를 이용해서 10KHz 주기로 SOC 발생
예2) ADCTRL1.6의 CONT_RUN 비트 설정
ADC 변환 시간(시퀀서 한 세트): 샘플링 주기
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
변환 시간(속도)
ADC 모듈이 S/H에 샘플링된 아날로그 신호를 디
지털 신호(PCM 데이터)로 변환하는 시간
ADC회로 구동 클럭이 변환 시간 결정
SYSCLKOUT
OSCCLK
OSC
30MHz
CLKIN
PLL
PLLCR[3:0]
SOC pulse
Generator
28x
CPU
CPS
HISCLK
High-Speed
Peripheral clock
Prescaler
HISPCP[2:0]
(ACQ_PS[3:0])
(x1/2 when 1,
x1 when 0)
4-bit Clock
Divider
ADCRL[11:8]
ADCTRL[7]
ADCTRL[4:1]
4bit divided clock
S/H Clock pulse
ADCCLK
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
변환 속도 계산
변환 속도가 7.5MHz로 설정되었다 하더라도, SOC의 발생
주기가 10KHz 이면, 샘플링 주기(rate)는?
10KHz
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADC 구동 클럭을 높이면
Aliasing이 줄어든다.
채널간 오차(cross-talk)가 커진다.
이 오차는 샘플링 윈도우를 키운다고 줄어드는 성
질의 것이 아니다.
ADC 구동 클럭을 낮추면
Aperture Error가 커진다.
주의 1: 구동 클럭과 샘플링 rate은 별개
1KHz로 샘플링을 하더라도, ADC 구동 클럭은 25MHz가 가능하
다.
주의 2: 281x ADC의 최고 구동 클럭은 25MHz
분주 부주의로 25MHz이상의 클럭이 공급되면, 결과는 엉망이다.
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
시퀀서란?
개발자와 ADC를 연결하는 매개체
채널 변환 순차 설정이 주된 동작
개발자가 시퀀서에 기동 신호를 전달하면, 시퀀서가 ADC회
로를 적절히 기동
시퀀서 설정 완료 인터럽트 발생 가능
다채널 조작 용기
8채널 조작 시퀀서가 2개
SEQ1: ADCINA0~7 → S/H-A
SEQ1: ADCINB0~7 → S/H-B
16채널 조작 단일 시퀀서로도 운용 가능(Cascaded 모드)
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
시퀀서의 잇점
Multi-rate System 구현 용이
로봇과 같은 Multi Sensors System 구현 용이
고속 샘플링 지원 용이
12.5MHz 샘플링: 샘플링당 12개의 명령어 처리
블록 샘플링:
최고 16회 혹은 16채널 변환을 1블록으로
시퀀서 완료 주기는 약 780KHz(12.5MHz/16)
인터럽트 처리 가능 / 알고리즘 처리 여유
주변 회로 연계 구동 능력
초기 설정만으로 ADC 구동 가능
타이머 주기 이벤트를 이용한 ADC 기동
유연한 ADC 기동과 결과 처리 가능
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADC 과정 블록 애니메이션
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
시퀀서: Cascaded(직렬) 모드
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
시퀀서: Dual Sequencers(병렬) 모드
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
281x ADC의 내부 레퍼런스 회로 이용법
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
DSP281x_Adc.c의 전원 관련 코드
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADCTRL3 레지스터의 이해(1)
ADCTRL3.8: EXTREF
0: 내부 레퍼런스 회로 사용
Power 시퀀스
ADCBGRFDN[1:0]: Bandgap & Reference
Power Down(=0)
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
파워 레벨에 따른 ADC 운영 팁
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADC 상태: ADCST
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
시퀀서 상태: ADCASEQSR
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADCTRL1
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADCTRL1
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
ADCTRL2
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
인터럽트 모드 - 1
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
인터럽트 모드 - 2
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
12비트 결과 저장
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
결과 저장 순서
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
Sequential Sampling Mode
http://cafe.naver.com/roboticslab
TMS320F2812 ADC
Simultaneous Sampling Mode
http://cafe.naver.com/roboticslab
Plan
4차
Peripherals Operation
(7월 3일)
Flesh Memory Control
5차
Peripherals Operation
ADC
6차
(7월 10일)
IQMath
Application
(7월 17일)
Address/Data Bus use to external ADC
7차
Application
Step Motor Drive
(7월 24일)
IR Sensor Interface
http://cafe.naver.com/roboticslab
www.themegallery.com