學習資源:普中科技DSP TMS320F28335、CCS6.0.0
1. 開發板功能及使用介紹
主要功能:電機控制,增強型PWM。
使用方法:安裝CCS軟件,安裝DSP仿真器驅動,給開發板供電並通過仿真器連接電腦。
2. DSP TMS320F28335介紹
2.1 命名
TMS:前綴(合格設備),320:系列號(DSP Family),F:工藝(Flash EEPROM),28335:設備類型,PGF:封裝形式(176引腳QFP封裝),A:溫度范圍(40~85℃)。
2.2 F28335內核的主要特點
- 集成了DSP和微控制器的長處,F28335能夠在一個周期內完成32×32位的乘法累加運算,或者兩個16×16位的乘法累加運算;
- 快速的中斷響應;
- 可在任何內存位置進行單周期讀、修改、寫操作;
- 可采用C/C++編程,效率非常高。
2.3 F28335處理器的主要資源
- 32位浮點DSP,主頻是150MHz,方便電機控制,電力設備控制及工業控制等;
- 片上存儲器:Flash——256K×16位,SRAM——34K×16位,BOOT ROM——8K×16位,OPT ROM——2K×16位;
- 片上外設:PWM——18路,HRPWM——6路,CAP——6路,QEP——2通道,ADC——2×8通道,12位,80ns轉換時間,0~3V量程(采集高電壓可以在外部分壓),SCI——3通道,MCBPS——2通道,CAN——2通道,SPI——1通道,I2C——1通道,外部存儲器擴展接口——XINTF,通用輸入/輸出IO——88個,看門狗電路。
與2812對比:
2.4 引腳分布
- JTAG引腳:燒錄程序,調試時燒錄到RAM,最終燒錄到Flash;
- 時鍾引腳:X1、X2;
- 復位引腳:XRS;
- 電源引腳:VDD、VSS…;
- ADC信號引腳:16路;
- GPIO和外設信號引腳。
2.5 F28335能做什么
- 自動化技術;
- 智能測量儀器;
- 家用、商用電子產品;
- 通信;
- 軍事領域。
3. 最小系統介紹
3.1 最小系統組成
1. 電源電路
兩個供電端→開關→轉壓。D8為指示燈。
模擬、數字隔離。
2. 復位電路
RST1手動復位,XRS直接接地。電容充電電路:開機復位。
3. 晶振電路
提供系統時鍾。
30MHz,X1和X2接晶振,XCLKIN接地。
4. 下載電路
配合JTAG下載器。
C_D3.3V上拉,GND下拉。
3.2 F28335啟動模式
TMS320F28335支持多種啟動模式。
通過4個撥碼選擇16種啟動方式:
4. CCS6工程導入
Project→Import CCS Projects…
View→Project Explorer
View→Target Configuration
Test Connection:測試是否連接成功。
編譯、調試。
5. 存儲器與寄存器
5.1 存儲器映射
給存儲器分配地址的過程就是存儲器映射。
1. 存儲器分配
F28335片上有256K×16位的FLASH,34K×16位的SARAM,8K×16位的BOOT ROM,2K×16位的OPT ROM,采用統一尋址方式(程序、數據和I/O統一尋址),從而提高了存儲空間的利用率,方便程序的開發。除此之外,F28335還提供了外部並行擴展接口XINTF,可進一步外擴存儲空間。
2. F28335存儲器特點
F28335是采用多級流水線的增強的哈佛總線結構,能夠並行訪問程序和數據存儲空間。
(1)片上SARAM
(2)BOOT ROM
(3)片上FLASH和OTP
flash分區:(共256K×16)
3. 代碼安全模塊
通過一個128位的密碼(相當於8個16位的字)來對安全區來進行加密或解密。這段密碼保存在FLASH的最后8個字中(0X33FFF8-OX33FFFF),也就是密碼區中(PWL) ,通過密碼匹配( PMF ) , 可以解鎖器件。
全1表示未加密,全0則不能解鎖。
4. 外部存儲器接口XINTF
5.2 寄存器和寄存器映射
通過#pragma預處理命令和DATA_SECTION將定義的寄存器指定到相應的存儲單元內,然后即可通過C語言來操作這些寄存器。
比方說我們找到0x007010這個單元地址,那么可以通過查閱芯片數據手冊了解到此單元是系統控制寄存器功能。因此為了更好區分此單元的功能和方便后續的程序開發,可以給這個單元取一個別名SysCtrlRegs,那么這個SysCtrlRegs就是寄存器,並且這個寄存器地址就是0x007010。這個過程就是寄存器映射。
5.3 如何訪問寄存器內容
對於GPIO控制寄存器,通過查詢數據手冊可知其首地址是0x006F80,然后使用#pragma和DATA_SECTION將定義的寄存器與實際的存儲單元對應起來。
#pragma DATA_SECTION(GpioCtrlRegs,"GpioCtrlRegsFile");
volatile struct GPIO_CTRL_REGS GpioCtrlRegs;
該定義可在DSP2833x_GlobalVariableDefs.c文件中查找到。
GpioCtrlRegsFile是SECTIONS內定義的,該定義可在DSP2833x_Headers_nonBIOS.cmd文件中查找到。
GPIO數據寄存器GPIO_DATA_REGS:
struct GPIO_DATA_REGS { union GPADAT_REG GPADAT; // GPIO Data Register (GPIO0 to 31) union GPADAT_REG GPASET; // GPIO Data Set Register (GPIO0 to 31) union GPADAT_REG GPACLEAR; // GPIO Data Clear Register (GPIO0 to 31) union GPADAT_REG GPATOGGLE; // GPIO Data Toggle Register (GPIO0 to 31) union GPBDAT_REG GPBDAT; // GPIO Data Register (GPIO32 to 63) union GPBDAT_REG GPBSET; // GPIO Data Set Register (GPIO32 to 63) union GPBDAT_REG GPBCLEAR; // GPIO Data Clear Register (GPIO32 to 63) union GPBDAT_REG GPBTOGGLE; // GPIO Data Toggle Register (GPIO32 to 63) union GPCDAT_REG GPCDAT; // GPIO Data Register (GPIO64 to 95) union GPCDAT_REG GPCSET; // GPIO Data Set Register (GPIO64 to 95) union GPCDAT_REG GPCCLEAR; // GPIO Data Clear Register (GPIO64 to 95) union GPCDAT_REG GPCTOGGLE; // GPIO Data Toggle Register (GPIO64 to 95) Uint16 rsvd1[8]; };
union GPCDAT_REG { Uint32 all; struct GPCDAT_BITS bit; };
all可對32位整體操作,一般使用bit進行位操作。
struct GPCDAT_BITS { // bits description Uint16 GPIO64:1; // 0 GPIO64 Uint16 GPIO65:1; // 1 GPIO65 Uint16 GPIO66:1; // 2 GPIO66 Uint16 GPIO67:1; // 3 GPIO67 Uint16 GPIO68:1; // 4 GPIO68 ... Uint16 GPIO87:1; // 23 GPIO87 Uint16 rsvd1:8; // 31:24 reserved };
所以要讓GPIO68輸出一個低電平可使用C語言調用結構體內成員,如下:
GpioDataRegs.GPCCLEAR.bit.GPIO68=1;//設置GPIO輸出低電平信號
6. 創建工程模板
6.1 基礎文件獲取
TI頭文件下載地址:http://www.ti.com/tool/CONTROLSUITE?keyMatch=controlsuite&tisearch=Search-EN
目錄:\device_support\f2833x\v141
\DSP2833x_common\cmd:
28335_RAM_lnk:仿真調試,F28335:燒錄到Flash。
\DSP2833x_common\include:頭文件;\DSP2833x_common\lib:運算庫文件;\DSP2833x_common\source:源文件。
\DSP2833x_headers\cmd:是否使用操作系統。
\DSP2833x_headers\include:頭文件;\DSP2833x_headers\source:全局定義。
6.2 新建工程
Project→New CCS Project…
自動生成的文件:
一個完整的基礎工程的構成文件:
- 首先需要仿真調試或者flash燒寫所需的.cmd文件和DSP的BIOS或nonBIOS .cmd文件;
- 其次需要我們使用的芯片的.ccxml目標配置文件;
- 芯片內核及外設.c源文件,比如DSP2833x_Gpio.c、DSP2833x_PieCtrl.c等;
- 芯片內核及外設.h頭文件,比如DSP2833x_Gpio.h、DSP2833x_PieCtrl.h等;
- DSP .lib庫文件,常用的如IQmath.lib等。
6.3 添加文件
右擊User→New→Source File→main.c
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File void main() { }
右擊工程→Properties→Include Options:添加對應頭文件路徑。
工程結構:
│ .ccsproject
│ .cproject
│ .project
│ 28335_RAM_lnk.cmd
│ F28335.cmd
│
├─.launches
│ DSP_2833x_ProjectTemplate.launch
│
├─.settings
│ org.eclipse.cdt.codan.core.prefs
│ org.eclipse.cdt.debug.core.prefs
│ org.eclipse.core.resources.prefs
│
├─APP
├─Debug
│ │ ...
│
├─include
│ ...
│
├─Libraries
│ DSP2833x_ADC_cal.asm
│ DSP2833x_CodeStartBranch.asm
│ DSP2833x_DefaultIsr.c
│ DSP2833x_GlobalVariableDefs.c
│ DSP2833x_Gpio.c
│ DSP2833x_Headers_nonBIOS.cmd
│ DSP2833x_PieCtrl.c
│ DSP2833x_PieVect.c
│ DSP2833x_SysCtrl.c
│ DSP2833x_usDelay.asm
│ IQmath.lib
│
├─targetConfigs
│ readme.txt
│ TMS320F28335.ccxml
│
└─User
main.c