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;
wait(1);
pc.printf("LED OFF\r\n");
myled = 0;
wait(1);
}
}
수정할 필요 없는 코드
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을 아래와 같이 설정 함
#define TIM_MST PWM_CH7
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;
}