1 / 30

D S P

D S P. Digital Signal Processing Digital Signal Processor Site by hellrow. 개 요. DSP 란 ? Features - DSP 에 탑재되어 있는 것들을 알아보자 . DSP Source. DSP 란 ?. Digital Signal Processing 혹은 Digital Signal Processor DSP 에는 제어용과 신호처리용이 있다 . 디지털 신호처리를 아주 잘하는 칩

meryl
Télécharger la présentation

D S P

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. D S P Digital Signal Processing Digital Signal Processor Site by hellrow

  2. 개 요 • DSP란? • Features - DSP에 탑재되어 있는 것들을 알아보자. • DSP Source

  3. DSP란? • Digital Signal Processing 혹은 Digital Signal Processor • DSP에는 제어용과 신호처리용이 있다. • 디지털 신호처리를 아주 잘하는 칩 • 디지털 신호는 단순한 사칙연산으로 귀결되는데 이 연산을 일반적인 마이크로 컨트롤러보다 뛰어나다. • 수학 연산전문 반도체라고도 할 수 있다.

  4. High-Performance Static CMOS Technology • 100 MHz (10-ns Cycle Time) • 60 MHz (16.67-ns Cycle Time) • Low-Power (1.8-V Core, 3.3-V I/O) Design • JTAG Boundary Scan Support(1) • High-Performance 32-Bit CPU (TMS320C28x) • 16 x 16 and 32 x 32 MAC Operations • 16 x 16 Dual MAC • Harvard Bus Architecture • Atomic Operations • Fast Interrupt Response and Processing • Unified Memory Programming Model • Code-Efficient (in C/C++ and Assembly) • On-Chip Memory • F2809: 128K X 16 Flash, 18K X 16 SARAM   F2808: 64K X 16 Flash, 18K X 16 SARAM   F2806: 32K X 16 Flash, 10K X 16 SARAM   F2802: 32K X 16 Flash, 6K X 16 SARAM   F2801: 16K X 16 Flash, 6K X 16 SARAM   F2801x: 16K X 16 Flash, 6K X 16 SARAM • 1K x 16 OTP ROM (Flash Devices Only) • C2802: 32K X 16 ROM, 6K X 16 SARAM   C2801: 16K X 16 ROM, 6K X 16 SARAM • Boot ROM (4K x 16) • With Software Boot Modes (via SCI, SPI, CAN, I2C, and Parallel I/O) • Standard Math Tables • Clock and System Control • Dynamic PLL Ratio Changes Supported • On-Chip Oscillator • Watchdog Timer Module • Any GPIO A Pin Can Be Connected to One of the Three External Core Interrupts • Peripheral Interrupt Expansion (PIE) Block That Supports All 43 Peripheral Interrupts • 128-Bit Security Key/Lock • Protects Flash/OTP/L0/L1 Blocks • Prevents Firmware Reverse Engineering • Three 32-Bit CPU Timers • Enhanced Control Peripherals • Up to 16 PWM Outputs • Up to 6 HRPWM Outputs With 150 ps MEP Resolution • Up to Four Capture Inputs • Up to Two Quadrature Encoder Interfaces • Up to Six 32-bit/Six 16-bit Timers • Serial Port Peripherals • Up to 4 SPI Modules • Up to 2 SCI (UART) Modules • Up to 2 CAN Modules • One Inter-Integrated-Circuit (I2C) Bus • 12-Bit ADC, 16 Channels • 2 x 8 Channel Input Multiplexer • Two Sample-and-Hold • Single/Simultaneous Conversions • Fast Conversion Rate:80 ns - 12.5 MSPS (F2809 only)160 ns - 6.25 MSPS (280x) 267 ns - 3.75 MSPS (F2801x) • Internal or External Reference • Up to 35 Individually Programmable, Multiplexed General-Purpose Input/Output (GPIO) Pins With Input Filtering • Advanced Emulation Features • Analysis and Breakpoint Functions • Real-Time Debug via Hardware • Development Support Includes • ANSI C/C++ Compiler/Assembler/Linker • Code Composer Studio™ IDE • DSP/BIOS™ • Digital Motor Control and Digital Power Software Libraries • Low-Power Modes and Power Savings • IDLE, STANDBY, HALT Modes Supported • Disable Individual Peripheral Clocks • Package Options • Thin Quad Flatpack (PZ) • MicroStar BGA™ (GGM, ZGM) • Temperature Options: • A: –40°C to 85°C (PZ, GGM, ZGM) • S: –40°C to 125°C (PZ, GGM, ZGM) • Q: –40°C to 125°C (PZ)

  5. High-Performance Static CMOS Technology • 100 MHz (10-ns Cycle Time) • 60 MHz (16.67-ns Cycle Time) • Low-Power (1.8-V Core, 3.3-V I/O) Design • 최고 100MHz 로구동되며,CPUCore 전원으로 1.8V를 공급 하면 되고 I/O 전압으로 3.3V를 공급해야 한다. JTAG Boundary Scan Support - Joint Test Access Grup반도체 테스트와 에뮬레이션이 용이하게 되어있다. JTAG 이 제정한 회로

  6. High-Performance 32-Bit CPU (TMS320C28x) • 16 x 16 and 32 x 32 MAC Operations • 16 x 16 Dual MAC • Harvard Bus Architecture • Atomic Operations • Fast Interrupt Response and Processing • Unified Memory Programming Model • Code-Efficient (in C/C++ and Assembly) • 16 x 16 or 32 x 32 bit MAC 연산을 지원한다. 32bit이므로 16bit 일 때는 연산을 두 번 하는 명령어도 지원한다. • MAC(Multiplication and Accumulation) 한 사이클에 곱셈과 덧셈을 한다는 명령어이다. • 처리하는 것들중에FFT, 디지털 필터링등이 있다.

  7. On-Chip Memory • F2809: 128K X 16 Flash, 18K X 16 SARAM F2808: 64K X 16 Flash, 18K X 16 SARAM F2806: 32K X 16 Flash, 10K X 16 SARAM F2802: 32K X 16 Flash, 6K X 16 SARAM F2801: 16K X 16 Flash, 6K X 16 SARAM F2801x: 16K X 16 Flash, 6K X 16 SARAM • 1K x 16 OTP ROM (Flash Devices Only) • C2802: 32K X 16 ROM, 6K X 16 SARAM C2801: 16K X 16 ROM, 6K X 16 SARAM - 128k Word의 플래시 메모리가 탑재되어 있다. C 는 CMOS ROM이 탑재되어 있다. 칩 내부터 RAM도 있으며 SARAM이다.

  8. Boot ROM (4K x 16) • With Software Boot Modes (via SCI, SPI, CAN, I2C, and Parallel I/O) • Standard Math Tables • TI 가 심어놓은 부트로더와 데이터들이다. • Clock and System Control • Dynamic PLL Ratio Changes Supported • On-Chip Oscillator • Watchdog Timer Module • PLL이 탑재되어 시스템 클럭 안정화와 외부 입력 클럭 주기를 조정 할 수 있다. Watchdog Timer 를 사용한다.

  9. Any GPIO A Pin Can Be Connected to One of the Three External Core Interrupts • 어떤 GPIO A Pin 이든지 3개의 외부 개입중단에 의해 연결될 수 있다 Peripheral Interrupt Expansion (PIE) Block That Supports All 43 Peripheral Interrupts - 총 43개의 Interrupt를 가지고 있다. Interrupt 마다 고유의 벡트를 사용하기 위해서는 PIE회로를 이용해야 한다.

  10. 128-Bit Security Key/Lock • Protects Flash/OTP/L0/L1 Blocks • Prevents Firmware Reverse Engineering • 칩 내부 메모리 내용을 보호하는 기능으로 128bit 암호를 채택하고 있다. 보호내용과 코드 추출로부터도 보호된다. • Serial Port Peripherals • Up to 4 SPI Modules • Up to 2 SCI (UART) Modules • Up to 2 CAN Modules • One Inter-Integrated-Circuit (I2C) Bus

  11. SPI는 두 개의 주변장치간에 직렬 통신으로 데이터를 교환할 수 있게 해주는 인터페이스로서, 그 중 하나가 주가 되고 다른 하나가 종이 되어 동작한다. SPI는 전이중 방식으로 동작하는데, 이는 데이터가 양방향으로 동시에 전달될 수 있음을 의미한다. SPI는 대부분 CPU와 주변장치들간에 통신을 하는 시스템에 주로 채용되지만, 두 개의 마이크로프로세서들 사이를 SPI의 형태로 연결하는 것도 가능하다. SPI에 의해 제어될 수 있는 주변장치들로는 시프트 레지스터, 메모리 칩, 포트 확장기, 디스플레이 드라이버, 데이터 변환기, 프린터, 데이터 저장장치, 센서, 마이크로프로세서 등 여러 가지 형식들이 있다.

  12. [SPI 관련 레지스터] SPICCR software reset, loopback SPICTL SPI clock Phase Select, Network Mode Control SPIST 신호를 받고 난 뒤 reset 시켜줌 SPIBRR 통신bits 통제 SPIRXEMU Emulation Buffer Received Data SPIRXBUF Transmit Data Buffer. SPIDAT Serial data. SPIFFTX SPI reset, FIFO enable, FIFO status SPIFFRX FIFOoverflow FIFO reset,FIFO interrupt SPIFFCT FIFO delay bits SPIPRI 움직임을 제어한다.

  13. [SIC 관련 레지스터]SCICCRSCI통신관련 레지스터 SCI에서 사용될 포맷,프로토콜,통신모드 설정SCICTL1SCI 제어 레지스터RX,TX를 제어하고, 수신 인터럽트 인에이블,TXWAKE와 SLEEP함수, SCI 소프트웨어 리셋 담당SCIHBAUD,SCILBAUD 이 레지스터에 기록된 값이SCI 전송 속도(Baud)SCICTL2SCI제어레지스터 2SCIRXST 수신 상태 레지스터SCIRXEMU 에뮬레이션 데이터 버퍼 레지스터SCIRXBUF 수신 데이터 버퍼 레지스터SCITXBUF 전송 데이터 버퍼 레지스터SCIPRI 우선 순위 제어

  14. 12-Bit ADC, 16 Channels • 2 x 8 Channel Input Multiplexer • Two Sample-and-Hold • Single/Simultaneous Conversions • Fast Conversion Rate:80 ns - 12.5 MSPS (F2809 only)160 ns - 6.25 MSPS (280x) 267 ns - 3.75 MSPS (F2801x) • Internal or External Reference - 2x8 채널 다중화, 동시 변환, 빠른 전환률 등의 특징을 가지고 있다.

  15. ADC란? • 아날로그-디지털 변환 이다. 변화하는 아날로그신호가 본질적인 내용은 달라지지 않은채, 디지털신호로 바뀌어지는 전자적 처리과정이다.

  16. DSP – ADC 를사용하는Source 를 짜보자!!

  17. Source #include "DSP280x_Device.h" // DSP280x Headerfile Include File #include "DSP280x_Examples.h" // DSP280x Examples Include File InitSysCtrl(); DisableDog(); InitPll(DSP28_PLLCR,DSP28_CLKINDIV); InitPeripheralClocks();

  18. DisableDog(); SysCtrlRegs.WDCR= 0x0068; 0000/0000/0110/1000

  19. 편하게 합시다..^^;;

  20. Source 맛보기만하자…GG… Keypoint 만정리!! InitPll(DSP28_PLLCR,DSP28_CLKINDIV);

  21. PLL이란? - ‘Phase Lock Loop’ 위상 고정 회로라 할 수 있다. PLL은 클럭의 위상을 고정해서 흔들리지 않게 하는 역할을 한다. - 클럭의 입 ∙출력 비율을 조절하는 기능.프로세서의 성능이 향상됨에 따라, 프로세서에 인가되는 클럭 스피드는 점점 높아지게 되는데, 클럭을 발생시키는 것 일수록 값이 비싸지고, EMI문제를 발생시킨다. 이런 상황에서 PLL은 입∙출력 조절 기능을 통해 낮은 주파수의 클럭을 몇 배의 높은 클럭 주파수로 바꿔주는 역할까지 한다.클럭의 입∙출력 비도 조절하고 클럭 품질까지 높여준다. -  TMS320F28x DSP에 있는 PLL 회로는 최저 0.5배에서 최대 5배까지 그 입∙출력비가 조절 된다. - InitPll(0xA)이다. 이 함수를 보면 전달 인자를 받아 그 값을 PLLPCR 레지스터의 DIV에 넣는다. 즉 개발자가 함수로 인자를 전달하면 그 값에 맞춰 PLL 설정을 하는 함수인 것이다. 여기서 한 가지 알아둬야 할 점은 PLL 설정을 바꾸면 시스템 클럭이 바뀌는데, 이 때 변경된 내용이 안정화되기까지는 어느 정도 시간이 필요하다.280x에서는 PLLSTS의 PLLLOCKS 비트가 PLL의 정상화를 알려주기 전까지 공회전을 하고 있다.

  22. InitPeripheralClocks(); void InitPeripheralClocks(void){   EALLOW;  // HISPCP/LOSPCP prescale register settings, normally it will be set to default valuesSysCtrlRegs.HISPCP.all = 0x0001;SysCtrlRegs.LOSPCP.all = 0x0002; SysCtrlRegs.XCLK.bit.XCLKOUTDIV=2;// Peripheral clock enables set for the selected peripherals.   // If you are not using a peripheral you may want to leave// the clock off to save on power. SysCtrlRegs.PCLKCR0.bit.ECANBENCLK =1;    // eCAN-BSysCtrlRegs.PCLKCR0.bit.ECANAENCLK =1;    // eCAN-ASysCtrlRegs.PCLKCR0.bit.rsvd3   =0;SysCtrlRegs.PCLKCR0.bit.SCIBENCLK =1;     // SCI-BSysCtrlRegs.PCLKCR0.bit.SCIAENCLK =1;     // SCI-ASysCtrlRegs.PCLKCR0.bit.SPICENCLK =1;     // SPI-CSysCtrlRegs.PCLKCR0.bit.SPIBENCLK =1;     // SPI-BSysCtrlRegs.PCLKCR0.bit.SPIAENCLK =1;     // SPI-ASysCtrlRegs.PCLKCR0.bit.SPIDENCLK =1;     // SPI-DSysCtrlRegs.PCLKCR0.bit.rsvd2   =0;SysCtrlRegs.PCLKCR0.bit.I2CAENCLK  =1;    // I2CSysCtrlRegs.PCLKCR0.bit.ADCENCLK  =1;    // ADCSysCtrlRegs.PCLKCR0.bit.TBCLKSYNC  =0;  // TBCLKSYNC defaultSysCtrlRegs.PCLKCR0.bit.rsvd1   =0;SysCtrlRegs.PCLKCR0.all = 0x3214; // Note: not all peripherals are available on all 280x derivates.// Refer to the datasheet for your particular device. {union PCLKCR0_REG regPCLKCR0;regPCLKCR0.bit.ECANBENCLK =1;    // eCAN-BregPCLKCR0.bit.ECANAENCLK =1;    // eCAN-AregPCLKCR0.bit.rsvd3   =0;regPCLKCR0.bit.SCIBENCLK =1;     // SCI-BregPCLKCR0.bit.SCIAENCLK =1;     // SCI-AregPCLKCR0.bit.SPICENCLK =1;     // SPI-CregPCLKCR0.bit.SPIBENCLK =1;     // SPI-BregPCLKCR0.bit.SPIAENCLK =1;     // SPI-AregPCLKCR0.bit.SPIDENCLK =1;     // SPI-DregPCLKCR0.bit.rsvd2   =0;regPCLKCR0.bit.I2CAENCLK  =1;    // I2CregPCLKCR0.bit.ADCENCLK  =1;    // ADCregPCLKCR0.bit.TBCLKSYNC  =0;  // TBCLKSYNC defaultregPCLKCR0.bit.rsvd1   =0;SysCtrlRegs.PCLKCR0.all = regPCLKCR0.all;} {union PCLKCR0_REG regPCLKCR0;regPCLKCR0.bit.ECANBENCLK =1;    // eCAN-BregPCLKCR0.bit.ECANAENCLK =1;    // eCAN-AregPCLKCR0.bit.rsvd3   =0;regPCLKCR0.bit.SCIBENCLK =1;     // SCI-BregPCLKCR0.bit.SPIAENCLK =1;     // SPI-AregPCLKCR0.bit.SPIDENCLK =1;     // SPI-DregPCLKCR0.bit.rsvd2   =0;regPCLKCR0.bit.I2CAENCLK  =1;   // I2CregPCLKCR0.bit.ADCENCLK  =1;    // ADCregPCLKCR0.bit.TBCLKSYNC  =0;  // TBCLKSYNC default//regPCLKCR0.bit.rsvd1   =0;regPCLKCR0.bit.SCIAENCLK =1;     // SCI-AregPCLKCR0.bit.SPICENCLK =1;     // SPI-CregPCLKCR0.bit.SPIBENCLK =1;     // SPI-B SysCtrlRegs.PCLKCR0.all = regPCLKCR0.all;}   SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1;  // eCAP1  SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1;  // eCAP2  SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1;  // eCAP3  SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1;  // eCAP4  SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1  SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1;  // ePWM2  SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1;  // ePWM3  SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1;  // ePWM4  SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1;  // ePWM5  SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1;  // ePWM6   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;    // Enable TBCLK within the ePWM  SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1;  // eQEP1  SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1;  // eQEP2  EDIS;} 이 함수는 280x DSP가 가지고 있는 주변회로에 클럭 공급에 관한 설정을 담당하는 함수이다. 이 함수의 구체적인 내용들은 이후의 시스템 클럭킹 부분에서 다루도록 할 예정이고, 여기서는 다만 DSP가 주변회로에 클럭을 공급할 것인지, 안할 것인지에 대해 설정하는 부분이라고 보시면 되겠다. 각 해당 레지스터 비트 필드에 1을 써 넣으면 클럭을 공급하고 0을 써 넣으면 클럭 공급을 중단하겠다는 것인데, 개발 단계에서는 모든 주변회로에 클럭을 공급하고 있다가 개발 마무리에 와서 자신이 사용하지 않는 주변회로에는 클럭 공급을 중단하는 것이 바람직하다 하겠다.

  23. InitSysCtrl(); • Watchdog 을무력화 (disable)시키고, • PLLCR 레지스트를 설정하여, 원하는 시스템 클럭을 만들어 내고, • CUP 로부터 갈라져 나가는 주변 회로 공급 클럭의 주파수를 설정하고, • 주변회로에 클럭 공급 여부를 설정한다.

  24. #define ADC_MODCLK 0x4 EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK;(12.5Mhz) EDIS; • HSPCLK(High Speed Clock) 고속클럭을 필요로 하는 주변회로로 클럭을 공급한다. HSPCLK 경로에 ADC 와 EV가물려있다. HSPCLK의 주파수를 조절하는 레지스터는 HISPCP이다. • EALLOW / EDIS = ‘Protected’ 영역에 위치하기에 값을 쓰기 위해서는 EALLOW 라는명령어가 필요하다. 조작을 마치면, EDIS 로 보호막을 다시 덮어주는 센스!!

  25. InitSciaGpio(); • GPIO pin을 일반용도의 입출려 핀으로 사용할 것인지, 아니면 다른 주변회로에 연결된 입출력 핀으로 사용할 것인지 결정한다. InitPieCtrl(); • PIE는 interrupt를 group으로 만들어준다. InitPieVectTable(); • InitpieCtrl함수에서 설정한 group을 VectTable에 저장한다. AdcRegs.ADCTRL3.all = 0x00E0; • The analog circuitry inside the core is powered up. • THebandgap and reference circuitry is powered up. for(i=0; i<10000; i++) { }

  26. AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK AdcRegs.ADCTRL1.bit.SEQ_CASC = 0 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x3; AdcRegs.ADCTRL1.bit.CONT_RUN = 1 AdcRegs.ADCTRL1.bit.SEQ_OVRD = 1 AdcRegs.ADCCHSELSEQ1.all = 0x0; AdcRegs.ADCCHSELSEQ2.all = 0x0; AdcRegs.ADCCHSELSEQ3.all = 0x0; AdcRegs.ADCCHSELSEQ4.all = 0x0; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x3; LoopCount= 0; ErrorCount= 0;

  27. scia_fifo_init(); • SCI FIFO can resume transmit and receive channels. SCI FIFO register configuration bits will be left as is. • SCI FIFO enhancements are enabled • Re-enable transmit FIFO operation • Write 1 to clear TXFFINT flag in bit 7 • Re-enable receive FIFO operation scia_echoback_init(); • Loofback을 끄고 echoback을 켜는 함수 AdcRegs.ADCTRL2.all = 0x2000; • 시퀀서를 시작한다.

  28. for(;;) { scia_xmit('$'); scia_xmit('$'); scia_xmit(SampleTable[0]); scia_xmit(SampleTable[1]); scia_xmit(SampleTable[2]); scia_xmit(SampleTable[3]); scia_xmit('@'); scia_xmit('@'); array_index = 0; // Wait for INT1 while (AdcRegs.ADCST.bit.INT_SEQ1== 0){} AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; SampleTable[array_index++]= ( (AdcRegs.ADCRESULT0)>>4); SampleTable[array_index++]= ( (AdcRegs.ADCRESULT1)>>4); SampleTable[array_index++]= ( (AdcRegs.ADCRESULT2)>>4); SampleTable[array_index++]= ( (AdcRegs.ADCRESULT3)>>4); }

  29. void scia_echoback_init() { // Note: Clocks were turned on to the SCIA peripheral // in the InitSysCtrl() function SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol SciaRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE SciaRegs.SCICTL2.all =0x0003; SciaRegs.SCICTL2.bit.TXINTENA =1; SciaRegs.SCICTL2.bit.RXBKINTENA =1; #if (CPU_FRQ_100MHZ) SciaRegs.SCIHBAUD =0x00; // 115200 baud @LSPCLK = 25MHz. SciaRegs.SCILBAUD =0x1a; #endif SciaRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset }

  30. void scia_xmit(int a) { while (SciaRegs.SCIFFTX.bit.TXFFST != 0) {} SciaRegs.SCITXBUF=a; } void scia_msg(char * msg) { inti; i = 0; while(msg[i] != '\0') { scia_xmit(msg[i]); i++; } } // Initalize the SCI FIFO void scia_fifo_init() { SciaRegs.SCIFFTX.all=0xE040; SciaRegs.SCIFFRX.all=0x204f; SciaRegs.SCIFFCT.all=0x0; }

More Related