Atmel Atmega48/88/168 과 같이 ISP 를 사용하는 MCU 의 경우 JTAGICE3 로 라이팅 하는 방법을 설명한 문서가 많지 않아 나와 조금 당황스러웠다.
먼저 저가 ISP 의 경우 Debugwire 기능을 사용할 수 없었고, JTAGICE3 는 핀 맵만 ISP 핀맵으로 맞춰주면 퓨즈비트 설정(DWEN)으로 DebugWire 기능을 사용할 수 있었다.
※ 준비물
1. Atmel JTAGICE3
2. 기본 구성품인 비표준용 와이어 케이블 또는 기본 구성품인 6P SPI-PDI 변환보드
3. 타겟 보드
10 P JTAG 케이블을 ISP 포트에 연결하면 쇼트가 발생하니 절대 연결하지 않도록 한다.
6P ISP 표준 을 지키고 있다면 기본 구성품인 SPI-PDI 변환 보드를 사용하면 묻지도 따지지도 않고 그냥 된다.
10P 비표준용 와이어 케이블을 사용할 경우 아래와 같이 연결하도록 한다.
10 P AVR ISP 규격
(1) MOSI |
(2) VCC |
| (3) N.C | (4) GND |
| (5) RST | (6) GND |
| (7) SCK | (8) GND |
| (9) MISO | (10) GND |
JTAGICE3 의 핀 규격(10P AVR JTAG 규격임)
(1) TCK | (2) GND |
| (3) TDO | (4) VTG |
| (5) TMS | (6) nSRST |
| (7) N.C | (8) nTRST |
| (9) TDI | (10) GND |
10P AVR ISP 포트에 JTAGICE3 비표준 케이블 연결 (DebugWire 사용 가능)
(1) [9]TDI | (2) [4]VTG |
| (3) N.C | (4) N.C |
(5) [6]nSRST | (6) N.C |
| (7) [1]TCK | (8) [2]GND |
(9) [3]TDO | (10) [0]GND |
※ [] 안의 숫자는 비표준용 케이블에 붙어있는 레이블 숫자임.
※ [5], [7], [8] 번 선은 연결하지 않는다.
- IAR MCS-51 에서 Timer Interrupt 가 호출되지 않는 문제.
- 분류없음
- 2011/11/16 10:53
- 8051, 8052, iar, interrupt, MCS-51, timer
열심히 삽질하였다....
그리고, 하다하다 안되서 Linker listing 을 확인해 보니 Timer Interrupt 코드가 링크되지 않는 문제를 발견하였다.
문제의 발단 :
정말 아무생각 없이.... 정말 평소에는 나만의 명명규칙으로 이름을 잘 짓다가 정말 아무생각 없이 인터럽트 함수를 'TIMER0', 'TIMER1' 이라고 지었다. (요즘 내가 정신이 탈출한 상태다.)
#pragma vector=timer0평소같았으면 내가 고정으로 사용하는 "Timer_InterruptN" 이라는 명명을 하였을 텐데, 정말 아무생각 없었다.
__interrupt void TIMER0(void)
{
... 블라블라 ...
}
#pragma vector=timer1
__interrupt void TIMER1(void)
{
... 블라블라 ...
}
그 결과 :
Global Interrupt 만 Enable 하면 시스템이 얼어버린다.
당연히 얼 수 밖에 없는게, 인터럽트가 발생해서 호출은 해야 겠는데 그 호출을 받을 함수가 링킹되지 않아버리니 중간에 떠버린 상태인 것이다.
Aㅏ................... 경고조차 없는 멋지고 깔쌈한 내 프로그램이 돌지 않는다니....
해결 방법 :
함수 이름을 바꾸었다. 그리고 빌드..., 그리고 Linker listing 을 확인해보니
아마도 IAR MCS-51 에서 TIMER0, TIMER1 과 같은 이름은 사용할 수 없는 것으로 보인다. (하지만 IAR 메뉴얼에는 관련 내용을 찾을 수 없다.)
교훈 :
분명 문제가 없는데 변수의 값이나 함수 호출에 문제가 발생한다.
Linker listing 생성을 활성화 하고 확인하도록 하자!





Recent comment