В данном микроконтроллере нет привычных нам портов А или B:
Как мы видим у нас есть только номер вывода, в связи с эти мы будем использовать только номера ножек: GPIOx.
Так же в данном микроконтроллере , прежде чем изменить/настроить ножки необходимо разрешить изменения в регистрах командой EALLOW. После окончания всех настроек мы запрещаем изменения в регистрах командой EDIS.
Если мы посмотрим на внутреннюю структуру входов/выходов, то мы увидим, что каждую даже настроенную ножку надо подключить к порту:
Для этого используется команда GpioCtrlRegs.GPAMUX.bit.CPIOx. Только после подключения ножки к порту, мы можем менять ее состояние командами GpioDataRegs.GPACLEAR.bit.GPIOx и GpioDataRegs.GPASET.bit.GPIOx.
Программный код:
#include "DSP28x_Project.h" // подключаем библиотеку void InitLED(void); // инициализация ножек void delay(unsigned long i); / / задержка void main(void) { InitSysCtrl();// инициализируе систему: PLL и WatchDog InitPieCtrl();// функция которая выключает все прерывания и сбрасывает флаги прерываний InitPieVectTable();//функция которая заполняет таблицу с векторами прерываний 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; // запрещаем работать с регистрами }
#include «DSP28x_Project.h» // Device Headerfile and Examples Include Files
#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;
GPIO_Handle myGpio;
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;
}