Moj čeka u fioci, nabavio sam ga kada je izašao, probao i ostavio za kasnije :). Tada nije bilo bog zna kakve podške,
ali se sigurno od tada pojavilo štošta. Samo sam ga pokrenuo (u debug mode) i probao par periferija.
Pretpostavljam da već imaš CCS i controlSUITE, za početak mi je bilo dovoljno:
File->New->CCS Project, family: C2000, variant: 2802x Piccolo / Experimeter's kit - Piccolo F28027, connection: ...XDS100v2 USB emulator.
Pa onda Project->Properties, u Build\C2000 Compiler\Include Options dodam u #include search path:
...\TI\controlSUITE\development_kits\C2000_LaunchPad
U Build\C2000 Linker\File Search Path dodam u include library file:
...\TI\controlSUITE\development_kits\C2000_LaunchPad\f2802x_common\lib\driverlib.lib
I jedan Blinky :):
Code:
#include <stdio.h>
#include <file.h>
#include "DSP28x_Project.h" // DSP28x Headerfile
#include "f2802x_common/include/pll.h"
#include "f2802x_common/include/clk.h"
#include "f2802x_common/include/wdog.h"
#include "f2802x_common/include/flash.h"
#include "f2802x_common/include/gpio.h"
#include "f2802x_common/include/pie.h"
#include "f2802x_common/include/adc.h"
#include "f2802x_common/include/timer.h"
interrupt void cpu_timer0_isr(void);
CPU_Handle myCpu;
PLL_Handle myPll;
WDOG_Handle myWDog;
CLK_Handle myClk;
ADC_Handle myAdc;
FLASH_Handle myFlash;
GPIO_Handle myGpio;
PIE_Handle myPie;
TIMER_Handle myTimer;
void setup_handles() {
myClk=CLK_init((void *)CLK_BASE_ADDR, sizeof(CLK_Obj));
myPll=PLL_init((void *)PLL_BASE_ADDR, sizeof(PLL_Obj));
myWDog=WDOG_init((void *)WDOG_BASE_ADDR, sizeof(WDOG_Obj));
myCpu=CPU_init((void *)NULL, sizeof(CPU_Obj));
myFlash=FLASH_init((void *)FLASH_BASE_ADDR, sizeof(FLASH_Obj));
myGpio =GPIO_init((void *)GPIO_BASE_ADDR, sizeof(GPIO_Obj));
myPie=PIE_init((void *)PIE_BASE_ADDR, sizeof(PIE_Obj));
myAdc=ADC_init((void *)ADC_BASE_ADDR, sizeof(ADC_Obj));
myTimer=TIMER_init((void *) TIMER0_BASE_ADDR, sizeof(TIMER_Obj));
}
void init_system() {
WDOG_disable(myWDog);
CLK_enableAdcClock(myClk);
(*Device_cal)();
CLK_disableAdcClock(myClk);
CLK_setOscSrc(myClk, CLK_OscSrc_Internal);
PLL_setup(myPll, PLL_Multiplier_12, PLL_DivideSelect_ClkIn_by_2);
PIE_disable(myPie);
PIE_disableAllInts(myPie);
CPU_disableGlobalInts(myCpu);
CPU_clearIntFlags(myCpu);
#ifdef _FLASH
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);
#endif
// Setup a debug vector table and enable the PIE
PIE_setDefaultIntVectorTable(myPie);
PIE_enable(myPie);
// Register interrupt handlers in the PIE vector table
PIE_registerPieIntHandler(myPie, PIE_GroupNumber_1, PIE_SubGroupNumber_7, (intVec_t)&cpu_timer0_isr);
TIMER_stop(myTimer);
TIMER_setPeriod(myTimer, 60000000); // set period (32b)
TIMER_setPreScaler(myTimer, 0); // set prescaler (1/(prescaler+1)) (32b)
TIMER_reload(myTimer);
TIMER_setEmulationMode(myTimer, TIMER_EmulationMode_StopAfterNextDecrement);
TIMER_enableInt(myTimer);
TIMER_start(myTimer);
GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
GPIO_setLow(myGpio, GPIO_Number_0);
GPIO_setMode(myGpio, GPIO_Number_1, GPIO_1_Mode_GeneralPurpose);
GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
GPIO_setLow(myGpio, GPIO_Number_1);
GPIO_setMode(myGpio, GPIO_Number_2, GPIO_2_Mode_GeneralPurpose);
GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Output);
GPIO_setLow(myGpio, GPIO_Number_2);
GPIO_setMode(myGpio, GPIO_Number_3, GPIO_3_Mode_GeneralPurpose);
GPIO_setDirection(myGpio, GPIO_Number_3, GPIO_Direction_Output);
GPIO_setLow(myGpio, GPIO_Number_3);
// Enable CPU INT1 which is connected to CPU-Timer 0:
CPU_enableInt(myCpu, CPU_IntNumber_1);
// Enable TINT0 in the PIE: Group 1 interrupt 7
PIE_enableTimer0Int(myPie);
// Enable global Interrupts and higher priority real-time debug events
CPU_enableGlobalInts(myCpu);
CPU_enableDebugInt(myCpu);
}
void main() {
setup_handles();
init_system();
while(1);
}
interrupt void cpu_timer0_isr(void) {
GPIO_toggle(myGpio, GPIO_Number_0);
GPIO_toggle(myGpio, GPIO_Number_1);
GPIO_toggle(myGpio, GPIO_Number_2);
GPIO_toggle(myGpio, GPIO_Number_3);
// Acknowledge this interrupt to receive more interrupts from group 1
PIE_clearInt(myPie, PIE_GroupNumber_1);
}
Inače, jedan drug koristi Launchpad u sprezi sa Matlab-om, direktno iz Simulinka. On je duduk za programiranje i kontrolere,
ali je podrška očigledno dobra, čim je uspeo da napravi kontrolu za njegov konvertor.
[Ovu poruku je menjao acho dana 08.08.2013. u 17:39 GMT+1]