W7500 mbed SDK Porting Guide (4/6)

2015. 10. 8. 15:022018년 이전 관심사/mbed

반응형

W7500 mbed SDK Porting Guide

wait Dealy Porting

예제 코드

#include "mbed.h"

int main()
{
    Serial pc(USBTX, USBRX);
    DigitalOut myled(LED1);

    pc.baud(115200);
    pc.printf("TEST Start\r\n");

    myled = 0;
    while(1){
        pc.printf("LED ON\r\n");
        myled = 1; // LED is ON
        wait(1); // 1 sec
        pc.printf("LED OFF\r\n");
        myled = 0; // LED is OFF
        wait(1); // 1 sec
    }
}

수정할 필요 없는 코드

api 폴더, common 폴더, hal 폴더에 있는 내용을 수정하면 호환성 문제가 발생 할 수 있으므로 수정하지 않는 것을 권한다.
GPIO Porting시 사용하는 아래 파일들은 수정할 필요가 없다.

  • api/wait_api.h
  • common/wait_api.c

common/wait_api.c

  • 아래 함수를 수정 할 필요는 없으나 wait 함수 동작을 위해 함수 구현부를 정리 하였다.
  • wait_us()에서는 PWM의 Counter 값을 읽고 함수가 시작했을 때의 Counter 값의 차이가 원하는 Delay 시간이 될 때 까지 Polling으로 기다림
void wait(float s) {
    wait_us(s * 1000000.0f);
}

void wait_ms(int ms) {
    wait_us(ms * 1000);
}

void wait_us(int us) {

    uint32_t start = us_ticker_read();
    while ((us_ticker_read() - start) < (uint32_t)us);
}

targets/hal/TARGET_WIZNET/TARGET_W7500x/us_ticker.c

  • 1us의 counter를 사용하기 위해 PWM을 아래와 같이 설정 함
// 32-bit timer selection
#define TIM_MST PWM_CH7

//static TIM_HandleTypeDef TimMasterHandle;
static PWM_TimerModeInitTypeDef TimMasterHandle;
static int us_ticker_inited = 0;

void us_ticker_init(void)
{
    if (us_ticker_inited) return;
    us_ticker_inited = 1;

    TimMasterHandle.PWM_CHn_PR = (GetSystemClock() / 1000000) -1;
    TimMasterHandle.PWM_CHn_LR = 0xFFFFFFFF;
    TimMasterHandle.PWM_CHn_PDMR = 1;

    PWM_TimerModeInit(TIM_MST, &TimMasterHandle);
    PWM_CHn_Start(TIM_MST);
}

uint32_t us_ticker_read()
{
    if (!us_ticker_inited) us_ticker_init();

    return TIM_MST->TCR;
}


반응형

'2018년 이전 관심사 > mbed' 카테고리의 다른 글

W7500 mbed SDK Porting Guide (6/6)  (0) 2015.10.08
W7500 mbed SDK Porting Guide (5/6)  (0) 2015.10.08
W7500 mbed porting Guide ( 3/6 )  (0) 2015.10.08
W7500 mbed porting Guide ( 2/6 )  (0) 2015.10.08
W7500 mbed porting Guide ( 1/6 )  (0) 2015.10.08