Firmware/TMS320F28377S

DSP [ 28377s] 초기 설정, SCI uart / 프로젝트 생성

또난 2022. 1. 21. 14:40

폰트 탭 사이즈 조정

 

에디터에서 탭 3으로 수정.

 

디버깅 에뮬레이터 수정

새로 추가 후 연결된 프로브 선택

디버깅 환경설정

우 클릭후 설정 확인.

 

디버깅 변경하면 위에 워크스페이스로 새로 지정해야 한다.
표시 부분 체크 안하면 디버깅 시작 안됨!!

SCI (UART)설정 

100Mhz 기준..

 

50MHz 기준 계산?
sci_bps.xlsx
0.01MB

코드

 

float 처리가 안됨. 하기 옵션 다 조정했는데..stack 사이즈가 문제인가.. 더 키우면 될것 같은데..

 

 

 

 

void SetupSCI(void)
{
    //  SCI setting
    EALLOW;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO28 = 0;   // Configure GPIO28 for SCIRXDA operation
    GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO29 = 0;   // Configure GPIO29 for SCITXDA operation
    GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;
    EDIS;

    // Low Speed Clock Prescaler 설정
//    EALLOW;
//    ClkCfgRegs.LOSPCP.bit.LSPCLKDIV = 2;    // LOSCLK = SYSCLKOUT/(LOSPCP*2)
//    EDIS;                                   // LOSCLK = 200MHz/(2*2) = 50MHz

    // SCI 주요설정 Bypass PLL  InitSysPll
    SciaRegs.SCICTL1.bit.SWRESET = 0;       // SCI Reset
    SciaRegs.SCICCR.all   = 0x07;
    SciaRegs.SCICTL1.all  = 0x03;
    SciaRegs.SCICTL2.all  = 0x02;
//    SciaRegs.SCIHBAUD.all = 0x02;  // 9600bps.  @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
//    SciaRegs.SCILBAUD.all = 0x8A;
//    SciaRegs.SCIHBAUD.all = 0x01;  // 19200bps.  @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
//    SciaRegs.SCILBAUD.all = 0x44;
    SciaRegs.SCIHBAUD.all = 0x00;  // 230400bps.  @LSPCLK = 50 MHz (200 MHz SYSCLK) HBAUD = 0x02 and LBAUD = 0x8B.
    SciaRegs.SCILBAUD.all = 0x1B;
    SciaRegs.SCICTL1.bit.SWRESET = 1;       // SCI Enable
    //  SciaRegs.SCICCR.bit.LOOPBKENA = 1;
}

char scia_Rx(void)
{
    char data;
    while(!(SciaRegs.SCIRXST.bit.RXRDY));
    data = SciaRegs.SCIRXBUF.bit.SAR;
    return data;
}

void scia_Tx(char data)
{
    while(!(SciaRegs.SCICTL2.bit.TXRDY));
    SciaRegs.SCITXBUF.bit.TXDT = data & 0x00FF;
}

// 이것만 쓰면 오버됨..그냥 printf로 씀.
#if 0
int d_msg(const char *fmt,...)
{
    int i = 0;
    va_list args;
    unsigned int n;
    char buffer[128];
    va_start(args,fmt);
    n = vsprintf(buffer,fmt,args);
    for(i = 0;i < n;i ++)
    {
       sc_Tx(buffer[i]);//use uart to send string
    }
    va_end(args);
    return n;
}
#endif

// printf 쓸때..
int fputc(int _c, register FILE *_fp)
{
    while(!(SciaRegs.SCICTL2.bit.TXRDY));
    SciaRegs.SCITXBUF.bit.TXDT = _c & 0x00FF;
    return(_c);
}

int fgetc(register FILE *_fp)
{
    int data;
    while(!(SciaRegs.SCIRXST.bit.RXRDY));
    data = SciaRegs.SCIRXBUF.bit.SAR;
    return data;
}


int fputs(const char *_ptr, register FILE *_fp)
{
    int i, len;
    len = strlen(_ptr);
    for(i=0 ; i<len ; i++)
    {
        while(!(SciaRegs.SCICTL2.bit.TXRDY));
           SciaRegs.SCITXBUF.bit.TXDT = _ptr[i];
    }
    return len;
}

//Tx
 scia_Tx('a');  scia_Tx('b');	scia_Tx('c');	scia_Tx('\n');
 
 // float 처리가 안됨.
  d_msg("cell %ld\n", (int32)(fcell*1000));
  printf("cell %ld\n", (int32)(fcell*1000));

 

신규 프로젝트 생성

1. 기본 프로젝트 생성

- 폴더 지정하고 생성

1.     C2000Ware f2837xs 코드 복사

 

cmd, source, include 폴더 생성

1) cmd 복사 2개의 파일 복사. (총2개)

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\headers\cmd\

F2837xS_Headers_nonBIOS.cmd 복사

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\common\cmd\

2837xS_RAM_lnk_shared_cpu1.cmd 복사

 

2) include 파일복사 (총121개)

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\common\include\ 모두 복사

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\headers\include\ 모두복사

c:\ti\c2000\C2000Ware_4_00_00_00\driverlib\f2837xs\driverlib\  c, h 파일 모두 복사.. 

음..c파일만..source로 넣어도 됨?? (확인필요..)

CCS(Lib) 폴더로 컴파일시 경고발생되므로...필요없으면 제외

그냥 driverlib.lib파일만 추가하고 컴파일 하는 건가??

 

3) source 파일복사 (총28개)

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\common\source\ 모두복사

c:\ti\c2000\C2000Ware_4_00_00_00\device_support\f2837xs\headers\source\\ 

F2837xS_GlobalVariableDefs.c 복사

 

4) include 추가.

 

하기 2개 파일 빌드 제외 안하면..

#20 identifier "DmaRegs" is undefined F2837xS_Dma.c /Test01/source line 59 C/C++ Problem 에러남..

=> CPU1을 추가하면 에러 안남.

 

 

5) 타겟 다운로드 추가.

신규 만들던가 다른 프로젝트 복사.

 

상기 프로젝트 코드

sci_code.zip
1.09MB

 

C2000Ware 다운 받으면 device_support / driverlib 폴더가 있는데,

 

device_support는 기본 라이브러리, driverlib 는 기본 라이브러리에 한번더 수정한 보드 라이브러리로 추정됨.

다운로드 옵션

램, 플래시 선택 배제하면서 다운하면 됨.

시스템 클럭 수정.

InitSysPll(XTAL_OSC,IMULT_40,FMULT_0,PLLCLK_BY_2);

(10Mhz * 40) / 2 = 200Mhz 

 

UART float 출력

printf full 설정.

 

스택 사이즈 0x200 --> 0x400

 

스택 섹션에 RAMD1 추가.

텍스트 섹션에 RAMGS14 추가.

램 다운로드때문에 RAMGS15 추가.