114 lines
1.7 KiB
Markdown
114 lines
1.7 KiB
Markdown
|
|
# 시뮬링크작성
|
|
|
|
|
|
|
|
## 기본블록 구성
|
|
|
|
|
|
MATLAB FUNC 블록 코드들 다음과 같이 작성한다.
|
|
|
|

|
|
|
|
|
|
|
|
## MATLAB FUN 블록 작성
|
|
|
|
|
|
MATLAB FUNC 블록을 더블 클릭다여 아래 코드를 작성한다.
|
|
|
|
---
|
|
|
|
|
|

|
|
|
|
---
|
|
|
|
|
|
```c
|
|
function led = fcn(key0, key1, key2, key3)
|
|
%#codegen
|
|
|
|
persistent mode;
|
|
persistent cnt;
|
|
persistent led_state;
|
|
|
|
if isempty(mode)
|
|
mode = uint8(0); % 0 = OFF
|
|
end
|
|
|
|
if isempty(cnt)
|
|
cnt = uint32(0);
|
|
end
|
|
|
|
if isempty(led_state)
|
|
led_state = false;
|
|
end
|
|
|
|
% -----------------------------
|
|
% 1. KEY 입력에 따라 모드 저장
|
|
% -----------------------------
|
|
if key0
|
|
mode = uint8(0); % OFF
|
|
elseif key1
|
|
mode = uint8(1); % SLOW
|
|
elseif key2
|
|
mode = uint8(2); % NORMAL
|
|
elseif key3
|
|
mode = uint8(3); % FAST
|
|
end
|
|
|
|
% -----------------------------
|
|
% 2. 모드에 따라 깜빡임 주기 선택
|
|
% 50MHz 클럭 기준
|
|
% -----------------------------
|
|
period = uint32(0);
|
|
|
|
if mode == uint8(0)
|
|
period = uint32(0); % OFF
|
|
elseif mode == uint8(1)
|
|
period = uint32(50000000); % 느림
|
|
elseif mode == uint8(2)
|
|
period = uint32(25000000); % 보통
|
|
else
|
|
period = uint32(5000000); % 빠름
|
|
end
|
|
|
|
% -----------------------------
|
|
% 3. LED 출력 생성
|
|
% -----------------------------
|
|
if mode == uint8(0)
|
|
led_state = false;
|
|
cnt = uint32(0);
|
|
else
|
|
if cnt >= period
|
|
cnt = uint32(0);
|
|
led_state = ~led_state; % LED 반전
|
|
else
|
|
cnt = cnt + uint32(1);
|
|
end
|
|
end
|
|
|
|
led = led_state;
|
|
|
|
end
|
|
|
|
```
|
|
|
|
## 블록작성완료
|
|
|
|
선으로 연결하여, 최종 블록 작성을 완료한다. Key 입력이 되도록 블록을 그려준다.
|
|
|
|
|
|

|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|