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