Настраиваем среду программирования  Code Composer Studio для программирования микроконтроллеров фирмы TMS320.

Страница на этапе разработки

Сегодня мы с Вами настроим среду программирования для микроконтроллеров TMS320. Работать мы с Вами будем в Code Composer Studio. Данное программное обеспечение можно бесплатно скачать на сайте производителя.  Работать мы с Вами будем с программатором, который расположен на плате TMS320-XDS100-V3:

Полную документацию на данный программатор можно посмотреть на сайте производителя. 

В качестве изучения будем использовать микроконтроллер TMS320F28027, который расположен на плате :

Данная плата удобна тем, что на ней уже расположено питание микроконтроллера, кварц и минимальная необходимая обвязка.

Внутренняя периферия микроконтроллера  TMS320F28027:

А так же назначение ножек:
Так же необходимо помнить, что напряжение питания данного микроконтроллера составляет 3,3В.

Так как настройка данного микроконтроллера имеет свои особенности, мы для проверки работы нашего программатора и микроконтроллера зальем пустой код, а уже в следующих уроках будем разбирать его особенности в работе.

Так же кроме непосредственно самой программы code composer studio нам понадобиться установить c2000ware.
Для проверки правильности установления ПО и работы самого программатора с микроконтроллером, мы вначале создадим пустой проект, в настройках которого мы проверим соединения нашего прогамматора с нашим ПО, для этого необходимо ****

Теперь мы откроем пример **** удалим с него все данные и запишем следующий код:

#include «DSP28x_Project.h»

#include «common/include/clk.h»
#include «common/include/flash.h»
#include «common/include/gpio.h»
#include «common/include/pie.h»
#include «common/include/pll.h»
#include «common/include/wdog.h»

void InitLED(void);
void delay(unsigned long i);

// Globals
//
CLK_Handle myClk;
FLASH_Handle myFlash;
PIE_Handle myPie;

void main(void) {

CPU_Handle myCpu;
PLL_Handle myPll;
WDOG_Handle myWDog;

myClk = CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
myCpu = CPU_init((void *)NULL, sizeof(CPU_Obj));
myFlash = FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
myPie = PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
myPll = PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
myWDog = WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));

// Perform basic system initialization
//
WDOG_disable(myWDog);
CLK_enableAdcClock(myClk);
(*Device_cal)();
CLK_disableAdcClock(myClk);

//
// Select the internal oscillator 1 as the clock source
//
CLK_setOscSrc(myClk, CLK_OscSrc_Internal);

//
// Setup the PLL for x10 /2 which will yield 50Mhz = 10Mhz * 10 / 2
//
PLL_setup(myPll, PLL_Multiplier_10, PLL_DivideSelect_ClkIn_by_2);

//
// Disable the PIE and all interrupts
//
PIE_disable(myPie);
PIE_disableAllInts(myPie);
CPU_disableGlobalInts(myCpu);
CPU_clearIntFlags(myCpu);

//
// If running from flash copy RAM only functions to RAM
//
#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif

//
// Setup a debug vector table and enable the PIE
//
PIE_setDebugIntVectorTable(myPie);
PIE_enable(myPie);


IER = 0x0000;
IFR = 0x0000;
InitLED();
while(1) {
GpioDataRegs.GPASET.bit.GPIO0 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO1 = 1;
GpioDataRegs.GPASET.bit.GPIO2 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO3 = 1;
delay(1000000);
GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;
GpioDataRegs.GPASET.bit.GPIO1 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1;
GpioDataRegs.GPASET.bit.GPIO3 = 1;
delay(1000000);
}
}

void delay(unsigned long i){
while(—i){};
}

void InitLED(void){
EALLOW;

GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;
//GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;
GpioCtrlRegs.GPADIR.all = 0xFFFFFFFF;
EDIS;
}

Мы пока не вникаем в данный программный код, но у нас будут включаться и выключаться светодиоды которые подключены к ножкам 0 — 4.