[DSP]/DSP283352011. 11. 27. 23:30

[TMS320F28335 EVM] TI 무료 RTOS SYSBIOS 테스트

[TMS320F28335 EVM] TI 무료 RTOS SYSBIOS 테스트




TI에서 제공하는 무료 RTOS인 SYSBIOS를 TMS320F28시리즈(TMS320F28335)에서 테스트 해보았다. 이번에는 기존 SYSBIOS 테스트 예제 에 추가하여세마포를 이용하여 쓰레드를 처리하는 예제를 테스트 했다.
 


SYSBIOS 프로젝트 생성
CCS4.0 이상에서 (예제는 CCS5에서 테스트 했다.) 에서 SYSBIOS 프로젝트 생성시 지원 가능하다.
CCS 프로젝트 생성시 SYSBIOS 항목에서 적당한 탬플릿을 선택하면 간단히 적용할 수 있다.






RTOS 버전 설정







SYSBIOS 등록 후 cfg파일에서 SYS/BIOS관련 각종 파라미터들을 쉽게 설정 할 수 있다.






SYSBIOS 구조






SYSBIOS 기본 골격
#include <xdc/std.h>
#include <xdc/runtime/Log.h>
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Semaphore.h>

#include "system.h"
#include "serial.h"

/* Counter incremented by timer interrupt */
volatile UInt tickCount = 0;
volatile UInt tickCount2 = 0;

//세마포 생성
extern const Semaphore_Handle mySem;
extern const Semaphore_Handle mySem2;

Void main()
{
 //사용자 초기화 함수
//--------------------------------------------------------

 SystemInit();

 Led1Init();
 Led1On();

 Led2Init();
 Led2Off();

 //Serial Init
 DebugInit(BAUD_115200);
 DebugPrint("SYS/BIOS Test Program.\r\n");
//--------------------------------------------------------

//--------------------------------------------------------
    //Start RTOS BIOS
    BIOS_start();
//--------------------------------------------------------
}


//수행될 TASK 함수
Void myTaskFxn(Void)
{
  wihle(1) 
  {
    :
   }
}

Void myTaskFxn2(Void)
{
  wihle(1) 
  {
    :
   }
}





기본 환경 설정이 마무리 되었기 때문에 간단한 예제를 작성하여 테스트 해보자.


TASK 설정 및 추가를 위한 cfg 파일 수정
var BIOS = xdc.useModule('ti.sysbios.BIOS');
BIOS.swiEnabled = false;
BIOS.taskEnabled = true;
BIOS.clockEnabled = false;


/* Create a task with priority 1 */
var Task = xdc.useModule('ti.sysbios.knl.Task');
var taskParams = new Task.Params();
taskParams.priority = 1;
var myTask = Task.create('&myTaskFxn', taskParams);
var myTask2 = Task.create('&myTaskFxn2', taskParams);

/* Inhibit the creation of a task to run idle functions */
Task.enableIdleTask = false;



TASK 실행
cfg파일에서 정의한 TASK를 실행할 함수를 아래과 같이 작성해 준다. 아래 예제는 단순히 루프를 돌며 대기하다 세마포 이벤트가 발생하면 LED깜박이고 UART로 값을 출력하는 예제이다. 세마포 이벤트는 일정 간격으로  타이머 Task에서 호출하도록 했다.
//RTOS TASK1 - BIOS_start() thread.
Void myTaskFxn(Void)
{
    while (TRUE)
    {
        //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem, BIOS_WAIT_FOREVER);
       
        Led1Toggle();
        DebugPrint("Task1=%d\r\n", tickCount);
    }
}


//RTOS Task2
Void myTaskFxn2(Void)
{
 while(1)
 {
  //세마포 핸들에 의해 호출 되기전 까지 대기
        Semaphore_pend(mySem2, BIOS_WAIT_FOREVER);

  Led2Toggle();
  test_cnt2++;
  DebugPrint("Task2=%d\r\n", test_cnt2);
 }
}


예제를 실행하면 두개의 TASK가 원하는 시간에 동작되는 것을 LED및 UART를 통해 확인 할 수 있다.
Task1=41
Task2=418
Task2=419
Task2=420
Task2=421
Task2=422
Task2=423
Task2=424
Task2=425
Task2=426
Task2=427
Task1=42
Task2=428
Task2=429
Task2=430
Task2=431
Task2=432
Task2=433
Task2=434
Task2=435
Task2=436
Task2=437
Task1=43



결론
RTOS는 사용의 편리성 보다는 초기 설정이나 MCU별 포팅에 대한 문제 때문에 부담이 많이 가는것이 현실이다.
TI에서 제공되는 SYS/BIOS는 TI의 대부분 MCU를 지원하고 간단히 설정 가능하므로 여러가지 장점이 많다. 한번 설정 해 두면 앞으로 도움이 많이 될것 같다.
Posted by nexp

댓글을 달아 주세요

  1. 박인권

    관리자의 승인을 기다리고 있는 댓글입니다

    2012.01.05 04:00 [ ADDR : EDIT/ DEL : REPLY ]

[DSP]/PICCOLO2011. 11. 25. 23:00

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정

[TMS320F28027 EVM] eCAP 테스트 - 펄스폭 측정



C28xx 시리즈(TMS320F2808, TMS320F28027, TMS320F28335.. 등)는 eCAP(Enhanced Capture) 모듈이 있어 입력 신호의 펄스폭을 정밀하게, 그리고 쉽게 측정 할수 있다.

TMS210F28027에는 한포트의 eCAP핀이 있고 아래와 같다. GPIO5, GPIO19 중 하나를 선택해서 설정가능하다.)
GPIO5/EPWM3B/ECAP1
GPIO19/XCLKIN/ /SCIRXDA/ECAP1SPISTEA


eCAP의 Capture모드 구조는 아래와 같고 4개의 32비트 캡쳐 레지스터로 이벤트(폴링, 라이징 에지)의 시간을 캡쳐 할 수 있다.





좀더 자세하게 들여다 보면 아래 구조와 같고 입력신호의 분주도 가능하다.








eCAP Delta Mode 예제 - 펄스폭 측정



초기화 코드
// Code snippet for CAP mode Delta Time, Rising and Falling edge triggers
//=======================
// ECAP 초기화
 ECap1Regs.ECEINT.all = 0x0000;             // Disable all capture interrupts
 ECap1Regs.ECCLR.all = 0xFFFF;              // Clear all CAP interrupt flags
 ECap1Regs.ECCTL1.bit.CAPLDEN = 0;          // Disable CAP1-CAP4 register loads
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0;        // Make sure the counter is stopped

ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_DELTA_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_DELTA_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
 ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run 



// Run Time ( e.g. CEVT1 triggered ISR call)
//==========================================
// Note: here Time-stamp directly represents the Duty cycle values.
DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1

Period1 =DutyOnTime1 + DutyOffTime1;
Period2 = DutyOnTime2 + DutyOffTime2;





절대 시간 측정 예제




// Code snippet for CAP mode Absolute Time, Rising edge trigger
// Initialization Time
//=======================
// ECAP module 1 config
ECap1Regs.ECCTL1.bit.CAP1POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP2POL = EC_FALLING;
ECap1Regs.ECCTL1.bit.CAP3POL = EC_RISING;
ECap1Regs.ECCTL1.bit.CAP4POL = EC_FALLING;

ECap1Regs.ECCTL1.bit.CTRRST1 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST2 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST3 = EC_ABS_MODE;
ECap1Regs.ECCTL1.bit.CTRRST4 = EC_ABS_MODE;

ECap1Regs.ECCTL1.bit.CAPLDEN = EC_ENABLE;
ECap1Regs.ECCTL1.bit.PRESCALE = EC_DIV1;
ECap1Regs.ECCTL2.bit.CAP_APWM = EC_CAP_MODE;
ECap1Regs.ECCTL2.bit.CONT_ONESHT = EC_CONTINUOUS;
ECap1Regs.ECCTL2.bit.SYNCO_SEL = EC_SYNCO_DIS;
ECap1Regs.ECCTL2.bit.SYNCI_EN = EC_DISABLE;
ECap1Regs.ECCTL2.bit.TSCTRSTOP = EC_RUN; // Allow TSCTR to run



// Run Time ( e.g. CEVT4 triggered ISR call)
//==========================================
TSt1 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at t1
TSt2 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at t2
TSt3 = ECap1Regs.CAP3; // Fetch Time-Stamp captured at t3
TSt4 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at t4

Period1 = TSt2-TSt1; // Calculate 1st period
Period2 = TSt3-TSt2; // Calculate 2nd period
Period3 = TSt4-TSt3; // Calculate 3rd period



TMS320F28027 eCAP 테스트 결과
TMS320F28027의 eCAP 모듈을 테스트 하기 위해 LED2(GPIO1)을 타이머를 이용하여 일정 주기로 펄스를 출력하고 그 주기를 측정하여 LCD에 출력하는 예제로 작성해 보았다. 출력은  [Serial LCD Module] 를 이용하여 시리얼  출력으로 표시 할 수 있도록 했다.





TMS320F28027 eCAP테스트 예제 소스 코드
void main(void)
{
 unsigned int cnt = 0;

 //DSP System Initialize
 SystemInit();

 DebugInit(BAUD_9600);
 DebugPrint("280x eCAP Test\r");

 //LED Initialize
 Led1Init();
 Led1Off();

 Led2Init();
 Led2Off();

 //eCAP초기화
 InitECapture();

 //타이 인터럽트 초기화
 Timer0Init();

 // Enable global Interrupts
 enalbe()

 while(1)
 {
  DebugPrint("D=%ldus\r", DutyOnTime1/TIME_TICK_PERIOD); 
  Delay(30);
 }
}  


//eCAP Interrupt handler
interrupt void ecap1_isr(void)
{
 Led1Toggle();

 DutyOnTime1 = ECap1Regs.CAP2; // Fetch Time-Stamp captured at T2
 DutyOffTime1= ECap1Regs.CAP3; // Fetch Time-Stamp captured at T3
 DutyOnTime2 = ECap1Regs.CAP4; // Fetch Time-Stamp captured at T4
 DutyOffTime2 = ECap1Regs.CAP1; // Fetch Time-Stamp captured at T1 

 Period1 =DutyOnTime1 + DutyOffTime1;
 Period2 = DutyOnTime2 + DutyOffTime2;

 ECap1Regs.ECCLR.bit.CEVT4 = 1;
 ECap1Regs.ECCLR.bit.INT = 1;
 ECap1Regs.ECCTL2.bit.REARM = 1;

 // Acknowledge this interrupt to receive more interrupts from group 4
 PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;
}


UART출력
280x eCAP Test
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us
DutyOnTime(9000) = 150.0us


Posted by nexp

댓글을 달아 주세요

[DSP]/DSP283352011. 11. 11. 23:00

[DSP28335 EVM] 로터리 엔코더 테스트 - TMS320F28335 QEP

[DSP28335 EVM] 로터리 엔코더 테스트 - TMS320F28335  QEP


TMS320F28335는 2채널의 EQEP 모듈이 있어 엔코더를 쉽게 연결 할 수 있다.

[DSP28335 EVM] EQEP 핀맵







[EXP-ALL EVM] 보드를 이용하면 로터리 엔코더를 이용하여 간단히 TMS320F28335의 EQEP를 테스트 해 볼 수 있다.
로터리 엔코더는  EQEP 채널 1에 연결되어 있다.
GPIO50/EQEP1A <- GPIO0/EPWM1A (simulates EQEP Phase A signal)    
GPIO51/EQEP1B <- GPIO1/EPWM1B (simulates EQEP Phase B signal)    
GPIO23/EQEP1I <- GPIO4 (simulates EQEP Index Signal)


[EXP-ALL EVM]보드의 로터리 엔코더 회로도








TMS320F28355 QEP 테스트 동영상





TMS320F28335 EQEP 를 이용한 로터리 엔코더 테스트 소스코드
QEP 레지스터에서 로터리 엔코더 값을 읽어와 FND에 출력하는 예제 코드 이다. 테스트를 위해 최대 QEP값은 100으로 설정했다.
void main(void)
{
 unsigned long cnt = 0;
 unsigned long old_cnt = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_115200);
 DebugPrint("DSP28335 QEP Test\r\n");

//FND 초기화
 FndInit();
 FndOut(10);

  //QEP1 초기화
   InitQep1();

 while(1)
 {

   //QEP 데이터 카운트값 읽어와서
  cnt = EQep1Regs.QPOSLAT;

  if(old_cnt != cnt)
  {
   Led1Toggle();
   FndOut((unsigned char)cnt);
   DebugPrint("cnt=%ld\r\n", cnt);
  }

 old_cnt = cnt;
  Delay(1);
 }
}  



Posted by nexp

댓글을 달아 주세요

[DSP]/PICCOLO2011. 9. 8. 23:32

[TMS320F28027] Piccolo 시리즈 PWM테스트

[TMS320F28027] Piccolo 시리즈 PWM테스트


TI의 Piccolo 시리즈중 저렴한 TMS320F28027은 8채널의 ePWM(enhanced PWM Modules)이 있다.
GPIO0/EPWM1A
GPIO1/EPWM1B/COMP1OUT
GPIO2/EPWM2A
GPIO3/EPWM2B/COMP2OUT
GPIO4/EPWM3A
GPIO5/EPWM3B/ECAP1
GPIO6/EPWM4A/EPWMSYNCI/EPWMSYNCO
GPIO7/EPWM4B/SCIRXDA


테스트를 위해 EPWM1에 연결하여 간단히 LED램프제어 하는 예제를 테스트 해 보았다.






TMS320F28027 ePWM테스트 동영상





TMS320F28027 ePWM 제어 드라이버 코드


void SetPwm1Period(unsigned int Frequency, unsigned int Period)
{
    EPwm1Regs.TBPRD = Frequency;
    EPwm1Regs.CMPA.half.CMPA = Frequency-(Frequency*(Period/100.0));
}

void HRPWM1_Config(unsigned int period)
{
   EPwm1Regs.TBPRD = period;                        // Set timer period
   EPwm1Regs.TBPHS.half.TBPHS = 0x0000;           // Phase is 0
   EPwm1Regs.TBCTR = 0x0000;                      // Clear counter

   // Setup TBCLK
   EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count up
   EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;        // Disable phase loading
   EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;       // Clock ratio to SYSCLKOUT
   EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

   EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;    // Load registers every ZERO
   EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
   EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
   EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;   

   // Setup compare
   EPwm1Regs.CMPA.half.CMPA = period / 2;
  
   // Set actions
   EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;             // Set PWM1A on Zero
   EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;
  
   EPwm1Regs.AQCTLB.bit.CAU = AQ_CLEAR;          // Set PWM1A on Zero
   EPwm1Regs.AQCTLB.bit.CAD = AQ_SET;
  
   // Active Low PWMs - Setup Deadband
   EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;
   EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_LO;
   EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;
   EPwm1Regs.DBRED = 10;
   EPwm1Regs.DBFED = 10;
  
  
   EALLOW;
  
    GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;    // Enable pull-up on GPIO0 (EPWM1A)
    GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;    // Enable pull-up on GPIO1 (EPWM1B)  
  
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;   // Configure GPIO0 as EPWM1A
    GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;   // Configure GPIO1 as EPWM1B
  
    EDIS;
}




TMS320F28027 ePWM 예제 소스코드

void main(void)
{
 unsigned int cnt = 0;
 int flag = 0;

//DSP System Initialize
 SystemInit();

 DebugInit(BAUD_115200);
 DebugPrint("LED Test\r\n");

 //LED Initialize
 Led1Init();
 Led1On();

 InitPwm();
 SetPwm1Period(PWM_10KHZ, 50);

 while(1)
 {
  if(flag)cnt--;
  else cnt++;

  if(cnt==100)flag = 1;
  else if(cnt == 0)flag=0;

  SetPwm1Period(PWM_100HZ, cnt);
  Delay(cnt/2);
 }
}  




Posted by nexp

댓글을 달아 주세요

[DSP]/DSP280x-M2010. 5. 4. 23:00

[DSP280x-M EMV]SPI 테스트 - 3축 가속도 센서(LIS3LV02) 데이터 로깅

[DSP280x-M EMV]SPI 테스트 - 3축 가속도 센서(LIS3LV02) 데이터 로깅


TMS320F2808 의 SPI통신을 이용하여 3축 가속도 센서 LIS3LV02를 테스트 했다. 확장 테스트 보드에 가속도 센서를 장착할 수 있기 때문에 쉽게 테스트 가능하다.

TMS320F2808에는 4개의 독립적인 SPI포트가 있는데 이중 표준커넥터로 뽑아둔 SPIA(P16~P19)를 이용한다.



확장 보드에서 LIS3LV02는 SPI포트에 연결되어 있고 CS핀은 P22에 연결되어 있다.



PC 호스트 프로그램



TMS320F2808 3축 가속도 센서 테스트 동영상



DSP280x-M SPI테스트를 위해 Code Composer Studio에 SPI관련 소스 및 가속도 센서 코드 추가



TMS320F280x SPI블럭도






SPI Mode설정
LIS3LV02제어를 위해서는 SPI Mode0로 설정해야한다. SPICCR, SPICTL레지스터에서 설정할 수 있다.




SPI 설정


SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0

 //SPI 초기화
 SpiaRegs.SPICCR.bit.SPISWRESET = 0;
 SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
 SpiaRegs.SPICCR.bit.SPILBK = 0;  //루프백 비사용
 SpiaRegs.SPICCR.bit.SPICHAR = 7;  //8비트 모드 
 SpiaRegs.SPICCR.bit.SPISWRESET = 1; // Ready to transmit

 SpiaRegs.SPICTL.bit.SPIINTENA = 0; //인터럽트 비사용
 SpiaRegs.SPICTL.bit.TALK = 1;   // Transmit enable
 SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; //SPI마스터 모드
 SpiaRegs.SPICTL.bit.CLK_PHASE = 0;   //SPI MODE0
 SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0; //Overrun interrupt disable

 SpiaRegs.SPIPRI.bit.FREE = 1;       // Set so breakpoints don't disturb xmission


SPI클럭 속도 설정
SpiaRegs.SPIBRR 레지스터에서 설정 가능하다.

 //SPI 클럭속도 설정
 SPI0_SetSpeed(SPI_SPEED_4MHZ);



 //SPI GPIO초기화
 EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;   // Enable pull-up on GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAPUD.bit.GPIO19 = 0;   // Enable pull-up on GPIO19 (SPISTEA)

    GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // Asynch input GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // Asynch input GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO18 = 3; // Asynch input GPIO18 (SPICLKA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO19 = 3; // Asynch input GPIO19 (SPISTEA)
   
    GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
    GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 1; // Configure GPIO19 as SPISTEA
    EDIS;
 
 //SPI FIFO 초기화
    SpiaRegs.SPIFFTX.all=0xE040;
    SpiaRegs.SPIFFRX.all=0x204f;
    SpiaRegs.SPIFFCT.all=0x0;


TMS320F2808 3축 가속도 센서 테스트 소스
void main(void)
{
 short data = 0;
 unsigned int flag = 0;

 //DSP System Initialize
 SystemInit();

 Led1Init();
 Led1On();

 DebugInit(BAUD_57600);
 DebugPrint("SPI Test\r\n");

 myAccel3lvInit();
 myAccel3lvWrite(CTRL_REG1, 0xD7);  //1000.0111 Power on, enable all axis, self test off
 myAccel3lvWrite(CTRL_REG2, 0x40);

 while(1)
 {
  if(DebugIsByte())
  {
   switch(U0_GetByte())
   {
   case '0':
    Led1Off();
    DebugPrint("LED OFF\r\n");
    break;

   case '1':
    Led1On();

    DebugPrint("LED ON\r\n");   
    break;

   case 'h':
    DebugPrint("device_id=");
    U0_PutInt(myAccel3lvRead(WHO_AM_I));
    break;

 case 'r':
    GetAccelValue(AXIS_X, &data);
    U0_PutInt(data);  
    break;
}
}
Posted by nexp

댓글을 달아 주세요