6. FLASH memory Controller

 

6.1    기본사항

 

MSP430 Flash memory 는 bit, byte, word 단위 프로그램이 가능합니다. Flash memory 모듈은 프로그램/소거 와 같은 조작을 할 수 있는 제어장치를 가집니다. 제어장치(controller)는 3개의 관련 레지스터와 timing 발생기(generator), 프로그램/소거 전압 발생기(generator)를 가지고 있습니다. 동작에 필요한 파워는 매우 작습니다. 또한 세그먼트(segment)단위의 삭제와 전체(mass)단위 소거가 가능 합니다. 주의 해야 할 사항은 Flash 쓰기 및 삭제와 같은 동작을 하기 위해 2.7V 이상의 VCC 가 필요하며 2.7V 이하의 쓰기 및 소거 작업은 그 결과를 예측할 수 없습니다.

 

그림 6 - 1

 

6.2    Flash memory segment

 

MSP430의 Flash memory는 세그먼트 단위로 분할되어 있습니다. 쓸 때는 bit, byte, word 단위로 Flash memory를 사용할 수 있으나 소거 작업 시에는 세그먼트 단위로 이루어 저야 합니다. 소거 작업에는 3가지 모드가 존재 합니다. 그것은 한 개의 세그먼트 단위로 삭제, main Flash 에 위치한 세그먼트 삭제, main및 information Flash 영역을 포함한 전제 세그먼트 삭제 입니다. Flash memory는 main과 information 영역으로 나누어 집니다. Main과 information 영역의 조작방법에는 차이가 없습니다. 두 개의 영역은 코드영역 또는 data영역으로 사용될 수 있습니다. Main과 information 영역의 차이는 세그먼트 사이즈와 물리적 주소 밖에 없습니다. Information 세그먼트에는 2개의 128byte의 세그먼트 영역이 있으며, main에는 적어도 2개의 512byte의 세그먼트 영역이 있습니다.

 

그림 6 - 2

 

6.3     Flash memory 동작

 

기본적으로 Flash memory는 read mode이며 read mode에서는 삭제 또는 쓰기 가 불가능 합니다. 또한 Flash timing 발생기(generator), 프로그램/소거 전압 발생기(generator)는 정지 됩니다. 이때 Flash 는 ROM처럼 동작 합니다.

 

MSP430은 In system program(ISP) 기능을 가지며 CPU는 자신의 Flash를 프로그램 가능합니다. Flash memory는 BLKWRT, WRT, MERAS, ERASE bit를 사용하여 프로그램/소거 모드 선택이 가능합니다. 모드는 총 5개가 존재 합니다. Flash 는 프로그램/소거 될 때 읽거나 기록하는 것은 금지 됩니다.

 

5가지 모드를 살펴보면 byte/word 쓰기, block 쓰기, segment 지우기, mass 지우기(모든 main memory), 모든 Flash 영역 지우기 입니다. 모든 Flash 의 업데이트는 Flash 의 code 영역 및 RAM에 있는 code 영역에서 전부 가능 합니다.

 

 

6.4    Flash timing 발생기(generator)

 

쓰고 지우는 작업을 위해 timing 발생기(generator)는 그림 6-3과 같이 동작 되어 집니다. timing 발생기(generator)의 동작주파수 f(FTG)의 범위는 257Khz – 476Khz 입니다. timing 발생기(generator)는 ACLK, SMCLK, MCLK의 클럭을 이용하여 FNx bit에 의해 나누어져 f(FTG) 출력으로 공급됩니다. f(FTG) 주파수가 프로그램/소거 동작 동안에 오동작을 하면 프로그램/소거 동작은 신뢰 할 수 없어 집니다.

 

그림 6 - 3

 

 

6.5    Erasing Flash Memory

Flash memory는 삭제되었을 때 각각의 bit는 1이 됩니다. 그림 6-4 와 같이 ERASE, MERAS bit 설정으로 삭제 모드가 선택 가능해 집니다.

그림 6 - 4

삭제의 시작은 삭제 번지 범위 내에서 dummy 값을 쓰면 시작됩니다. Dummy 쓰기 후 Flash timing 발생기(generator)와 삭제 동작을 시작 합니다. 그림 6-5는 삭제 타이밍 입니다.

그림 6 - 5

busy bit는 dummy 쓰기 직후에 자동으로 설정되며 삭제 주기 동안 유지됩니다. BUSY, MERAS, ERASE는 삭제 주기가 완료되면 자동으로 삭제 됩니다. 이런 삭제 시간은 모든 MSP430에서 동일합니다.

 

삭제되는 번지 범위 내에서 dummy 쓰기는 Flash memory에 영향이 없기 때문에 어떠한 표시도 남지 않습니다. 이때 잘못된 dummy 쓰기는 무시됩니다.

모든 인터럽트는 Flash 삭제 작업 전에 중지되어야 합니다. 삭제 작업 후 인터럽트를 다시 동작시키면 Flash 삭제 작업 중에 발생한 인터럽트가 해당 flag를 설정해 둔 사태이기 때문에 flag에 따른 인터럽트 처리 루틴이 동작 됩니다.

 

6.6     Flash memory에서 삭제 동작

어떤 삭제 동작도 RAM 또는 Flash 에서 시작 가능합니다. Flash 부분 삭제가 Flash memory에서 시작되어 질 때 Flash controller에 의해 타이밍 제어가 됩니다. 이때 CPU는 삭제가 완료될 때까지 정지하고 있습니다.

삭제완료 후 CPU는 코드 실행을 재개 합니다. 주의할 사항은 현재 실행되고 code가 있는 Flash memory 도 삭제가 가능하기 때문에 code가 지워져 CPU가 소거 후 어떻게 동작하는지 알 수 없을 수도 있다는 것입니다.

그림 6-6 은 Flash memory에서 삭제 동작을 나타냅니다.

그림 6 - 6

 

6.7    RAM 에서 삭제 동작

어떤 삭제 동작도 RAM 에서 시작 될 수 있습니다. 이때 CPU는 정지하지 않고 RAM에 있는 code는 계속 실행 합니다. CPU는 다른 Flash에 접근하기 전에 BUSY bit를 조사해야 합니다. BUSY가 설정되어 있을 때 Flash 에 접근하면 접근위반이 되어 ACCVIFG가 설정됩니다. 이때 삭제 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 7

  1. Flash memory 쓰기

 

Write 모드는 WRT, BLKWRT bit를 이용합니다. 두 가지의 쓰기 모드가 존재하며 두 가지의 쓰기 모드는 각각의 쓰기 과정이 존재 합니다. Byte/word 쓰기 동작과 Block 쓰기가 존재 하며 Block 쓰기가 대략 2배 정도 빠릅니다. 쓰기 동작 동안 BUSY bit 는 설정 되어 있으며, 쓰기 동작이 RAM 에서 시작 되었으면 BUSY가 설정되어 있는 동안 Flash 에 접근하면 안됩니다. 접근한다면 접근 위반이 되어 ACCVIFG가 설정됩니다. 이때 쓰기 동작의 결과를 예측할 수 없습니다.

 

그림 6 - 8

 

  1. byte/word 쓰기 동작

 

byte/word 쓰기 동작은 Flash 나 RAM 영역에서 시작 가능 합니다. Flash memory에서 동작 될 때 Flash controller 에서 타이밍을 제어하며 완료 될 때까지 CPU는 정지 됩니다. 쓰기 완료 후 CPU는 다음 명령을 실해 합니다.

 

그림 6 - 9

 

byte/word 쓰기가 RAM에서 시작 되면 CPU는 계속 동작하며 CPU가 BUSY 가 0 이 되기 전에 Flash 에 접근하면 접근위반으로 ACCVIFG가 설정 됩니다. 그리고 쓰기 완료는 예측 할 수 없습니다.

 

6.10    Flash memory에서 byte/word쓰기 동작

그림 6 - 10

 

6.11    RAM 에서 byte/word 쓰기 동작

그림 6 - 11

  1. block 쓰기

 

많은 양의 순차적 byte나 word를 쓸 때 좀더 속도를 빠르게 하기 위해 block write를 사용합니다. 하나의 block은 64byte이며 각각 0xXX00, 0xXX40, 0xXX80, 0xXXC0 번지에서 시작 됩니다. 또한 0xXX3F, 0xXX7F, 0xXXBF, 0xXXFF에서 끝납니다. 그림 6-12에서 예를 확인 할 수 있습니다.

 

그림 6 - 12

 

블록쓰기는 Flash 에서 시작 될 수 없습니다. 블록쓰기는 ROM 또는 RAM 영역에서 시작되어야 합니다. BUSY 는 블록쓰기 동안 설정 되어 있으며, 하나의 byte/word를 쓰기 전에 WAIT bit를 점검해서 WAIT bit가 설정되어 있으면 다음 쓰기가 가능하다는 것을 나타냅니다. 연속 블록쓰기를 할 때 현재 블록이 완전히 쓰여진 후 BLKWRT를 0으로 설정해야 하고 BUSY가 0 이 되면 다음 블록을 쓰는 것이 가능합니다. 그림6-13은 블록 쓰기 타이밍을 표시하고 그림 6-14는 flow를 보여줍니다.

 

그림 6 - 13

 

 

그림 6 - 14

 

6.13     쓰기나 지우기 작업 후에 Flash memory access

 

어떤 쓰기나 지우기 동작이 RAM에서 시작되고 BUSY=1 이면 CPU는 어떠한 Flash 영역도 읽거나 쓰면 안 되고, 만약 그렇지 않았다면 접근위반이 발생하여 ACCVIFG가 설정됩니다. 물론 결과는 예측 불가능해집니다.

만약 Flash 에 쓸 때 WRT이 0 으로 설정되어 있으면 ACCVIFG 가 설정되고 Flash memory에는 아무런 영향을 미치지 않습니다.

 

Byte/word 쓰기 또는 지우는 동작이 Flash memory에서 시작될 때 Flash 컨트롤러는 CPU의 다음처리 명령을 0x3FFF로 설정 합니다. 0x3FFF는 jmp PC 명령으로 Flash 조작 중에 멈추어 있는 CPU를 다시 살립니다. 컨트롤러가 Flash 에 대한 조작이 끝나거나 BUSY가 0 이면 CPU는 다음 명령을 처리 합니다.

 

주의할 사항은 Flash 조작적에 모든 인터럽트는 사용이 금지되어야 합니다. 만일 인터럽트를 사용하게 둔 상태에서 Flash 조작 중에 인터럽트가 발생되면 jmp PC 명령을 CPU가 호출되게 됩니다. 그래서 Flash 조작이 완료되면 CPU는 인터럽트 처리루틴이 실행되지 않고 임의에 위치에서 프로그램이 실행됩니다.

 

그림 6-15 은 Flash access 동안에 BUSY=1일 조건 입니다.

 

그림 6 - 15

 

6.14    쓰기나 지우기 동작 중에 정지

 

Flash 조작 중에 EMEX bit를 조작 하여 Flash 조작을 중지 할 수 있습니다. EMEX bit를 설정하여 Flash 조작을 멈추고 Flash 컨트롤러를 멈춥니다. 모든 Flash 조작이 중지되고 Flash는 read 모드가 됩니다. 모든 FCTL1레지스터는 reset 됩니다. 이때 Flash 조작에 대한 결과는 예측할 수 없습니다.

 

6.15    Flash memory controller의 동작

 

FCTLx register 는 16bit 입니다. Password 가 걸려있고, read와 write가 가능합니다. 레지스터를 읽거나 쓸 때는 워드 명령이 사용되며 쓰기 접근을 위해서는 상위 byte에 0xA5를 포함해야 합니다. 0xA5가 FCTLx 레지스터의 쓰기 패스워드가 됩니다. 0xA5 이외의 값은 KEYV flag를 동작시켜 PUC가 발생되어 system reset 이 됩니다. FCTLx 레지스터는 읽을 때는 0x96이 상위 byte에서 읽어집니다.

FCTL1의 기록은 block write mode에서 WAIT가 1 일 때만 가능합니다. 소거 또는 byte/word 쓰기 동작 중에 FCTL1에 어떠한 쓰기 동작 을 해도 접근위반이 됩니다. 그래서 ACCVIFG가 설정됩니다.

블록 쓰기 모드에서 WAIT가 0 일때 FCRL1을 쓰면 접근위반이 되어 ACCVIFG가 설정됩니다.

BUSY가 1일 때 FCTLx 레지스터에 쓰기 동작은 접근 위반이 되고 읽기동작은 접근위반이 되지 않습니다.

 

6.16    Flash memory컨트롤러 인터럽트

 

Flash memory 컨트롤러는 2개의 인터럽트 원인이 있습니다. 그것은 KEYV와 ACCVIFG 입니다. 접근위반이 발생될 때 ACCVIFG가 설정되며 이 때문에 인터럽트가 발생됩니다. ACCVIFG 인터럽트는 NMI 인터럽트로 GIE와 관계없이 동작 됩니다. 접근위반이 어디서 발생되었는지 알기 위해서 프로그램적인 점검이 필요합니다. ACCVIFG는 소프트웨어에 의해 reset이 가능합니다. Flash 컨트롤러 레지스터에 부정확한 암호로 쓰기작업을 하면 위반 flag인 KEYV가 설정됩니다. 이때는 PUC가 바로 발생됩니다.

 

6.17 프로그램 가능한 Flash 디바이스

 

MSP430은 여러 가지 방식으로 프로그램 가능 합니다.

먼저 JTAG을 통하여 프로그램 가능한데 JTAG은 4개의 시그널 PIN을 이용합니다. JTAG 은 FUSE로 보호되며 FUSE 사용으로 JTAG 사용이 금지 될 수 있습니다.

또 하나는 MSP430은 bootstrap loader(BSL)울 가지고 있습니다. BSL은 UART을 이용하여 RAM을 읽거나 프로그램이 가능합니다. BSL을 이용한 Flash 접근은 256bit의 사용자 암호에 의해 보호 됩니다.

마지막으로 사용자가 여러 가지 프로그램적인 방법을 사용하여 UART, SPI, 일반I/O 등등을 사용하여 프로그램 할 수 있습니다.

 

그림 6 - 16

 

FCTL1 (Flash memory Control Register 1)

BIT 

15 

14

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

BLKWRT 

WRT 

x 

x 

x 

MERAS 

ERASE 

X

초기값

0 

0 

0 

0 

0 

0 

0 

0 

읽고쓰기

R/W 

R/W 

R 

R 

R 

R/W 

R/W 

R 

 

BLKWRT : block 쓰기 모드 설정, WRT와 함께 block 모드를 설정 합니다.

EMEX 가 설정되면 BLKWRT는 자동으로 reset 됩니다.

(0 : block 쓰기 모드 off , 1: block 쓰기 모드 on)

 

WRT : 쓰기동작, 기록중임을 나타냅니다. EMEX 가 설정되면 자동으로 reset 됩니다.

( 0 : 쓰기 동작 off , 1: 쓰기 동작 on)

 

MERAS : mass 삭제 동작 설정

ERASE : MERAS 와 ERASE 두 개의 설정으로 삭제모드를 설정합니다.

Emex 설정으로 자동 reset 됩니다.

 

MERAS 

ERASE 

동작

0 

0 

삭제 안함

0 

1 

한 개 세그먼트 단위 삭제

1 

0 

모든 main 세그먼트 삭제

1 

1 

모든 세그먼트 삭제

 

FCTL2 (Flash memoey Control Register 2)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

FSSELx 

FNx 

초기값

0 

1 

0 

0 

0 

0 

1 

0 

읽고쓰기

R/W 

R/W 

R/W

R/W 

R/W 

R/W 

R/W 

R/W 

 

FSSELx : Flash timing 발생기(generator)의 소스를 설정 합니다.

( 00: ACLK , 01: MCLK , 10(11): SMCLK )

 

FNx : Flash timing 발생기(generator)의 소스를 얼마나 나누어 사용 할 것인지를 설정합니다.

나누어지는 값은 FNx +1 이다.

 

FCTL3 (Flash memoey Control Register 3)

BIT 

15 

14 

13 

12 

11 

10 

9 

8 

명칭

읽을 때 무조건 0x96 이 읽힘

쓸 때 0xA5를 사용

초기값

읽고쓰기

 

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

x 

x 

EMEX 

LOCK 

WAIT 

ACCVIFG 

KEYV 

BUSY 

초기값

0 

0 

0 

1 

1 

0 

0 

0 

읽고쓰기

R 

R 

R/W 

R/W 

R 

R/W 

R/W 

R/W 

 

EMEX : Flash 조작 중지 (0 : 조작 중지 안함 , 1: 조작 중지)

 

LOCK : Flash 를 쓰거나 지우는 작업 후에 memory를 unlock 합니다.

Lock bit는 byte/word 쓰기 동안 언제든지 1이 설정 될 수 있습니다.

또한 정상으로 완료되면 설정 될 수 있습니다. Lock bit가 BLKWRT = WAIT =1 일 때 설정되면

BLKWRT 와 WAIT 는 reset 되고 block 쓰기는 끝납니다.

( 0: unlock ,1:lock)

WAIT : Flash memory가 기록 되는 것을 나타냄

( 0: 다음 쓰기나 지우기 작업 준비 안됨, 1: 다음 쓰기나 지우기 작업 준비 됨)

ACCVIFG : 접근위반 발생

( 0: 접근위반 발생 안됨 , 1; 접근 위반 발생)

 

KEYV : Flash 보안 위반

( 0: 패스워드 정확 , 1: 패스워드 오류)

 

BUSY : Flash timing 발생기(generator)의 동작 표시

( 0 : Flash timing 발생기(generator) 동작 안함 , 1: Flash timing 발생기(generator) 동작 중)

 

IE1 (Interrupt Enable Register 1)

BIT 

7 

6 

5 

4 

3 

2 

1 

0 

명칭

   

ACCIVIE 

         

초기값

   

0 

         

읽고쓰기

   

R/W 

         

 

ACCVIE : Flash 접근 위반 flag 발생을 가능하게 한다.

( 0: ACCVIFG 발생 불가 , 1: ACCVIFG 발생 가능)

 

 

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 7  (0) 2012.11.15
[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15

 

  1. FLL+ Clock module

 

5.1    FLL+ Clock module 구조

 

FLL+ Clock module은 msp430x4xx 디바이스에 clock 을 공급합니다. FLL+ Clock module를 사용하여 저가의 System 을 만들 수 있습니다. 또한 ultra low power 구현이 가능해 집니다. FLL+ Clock module은 내부에 3가지의 clock 소스(LFXT1CLK , XT2CLK, DCOCLK)가 존재합니다. 그 중 가장 사용이 편리한 것을 선택해서 사용이 가능하다. 내부의 FLL은 LFXT1 크리스탈(시계용) 주파수를 이용한 디지털 modulator 와 디지털 오실레이터 제어기(DCO)를 사용 합니다. Fll+ Clock module 은 두 개의 외부 크럭 입력부가 있으며, 크리스탈, 레조네이트, 또는 내부 발진기를 이용하여 동작합니다. (모든 것은 소프트웨어 적으로 제어가 가능 합니다.)

 

FLL+ clock 모듈은 두 개 또는 세 개의 clock source (LFXT1CLK , XT2CLK, DCOCLK )가 사용됩니다.

 

LFXT1CLK 는 저 주파수 또는 고 주파수 클럭용으로 사용 가능합니다. 32768Hz 의 시계용 크리스탈, 일반 크리스탈, 레조네이터 등이 사용되며, 450kHz – 8MHz 까지 사용이 가능 합니다.

XT2CLK 는 옵션으로 사용 가능한 고 주파수 클럭용으로 사용 가능합니다. 450kHz – 8MHz 까지 사용이 가능 합니다.

 

DCOCLK 는 내부에서 제어 가능한 RC특성을 가진 오실레이터 이며, FLL에 의해 안정화 됩니다.

 

4개의 clock 신호(ACLK, ACLK/n, MCLK, SMCLK)를 FLL+ module 용으로 사용할 수 있습니다.

 

ACLK은 보조 클럭 이며 LFXT1CLK를 source로 사용합니다. 주변 모듈사용을 위해 프로그램적으로 선택 하여 사용할 수 있습니다.

ACLK/n 은 ACLK를 n으로 나눈 클럭 입니다. N은 1,2,4,8이 될 수 있으며, 외부 출력용으로 사용할 수 있습니다.

MCLK는 메인 클럭 입니다. LFXT1CLK, XT2CLK, DCOCLK 중에 프로그램적으로 선택하여 사용할 수 있습니다. FLL에 의해 1,2,4,8로 나누어질 수 있으며, CPU와 SYSTEM에 사용 될 수 있습니다.

SMCLK은 보조 클럭 이며 오실레이터2 가 장착이 되어 있다면 XT2CLK 이나 DCOCLK중 프로그램적으로 선택하여 사용할 수 있습니다. 주변장치에 사용 되어 집니다.

 

msp430x44x나 msp430x43x의 FLL+ clock 모듈은 그림 5-1과 같습니다. 또한 msp430x42x와 mxp430x41x는 그림 5-2와 같습니다.

 

 

 

 

그림 5 - 1

그림 5 - 2

 

5.2    FLL+ Clock module 동작

 

FLL+ Clock 모듈은 PUC(power up clear)후에 MCLK, SMCLK는 DCOCLK에 의해 ACLK위 32배로 설정됩니다. 예를 들어 ACLK에 32768Hz 크리스탈을 사용하면 MCLK, SMCLK는 1.048576MHz 로 설정 됩니다.

 

상태 레지스터 컨트롤 bit 인 SCG0, SCG1, OSCOFF, CPUOFF의 설정은 MSP430의 동작모드를 조절하고 FLL+ Clock 모듈의 구성 요소들의 사용을 설정할 수 있습니다. System Reset 또는 인터럽트 동작 모드에 관련된 부분을 참고해서 보시길 바랍니다.

 

SCFQCTL, SCFI0, SCFI1, FLL_CTL0, FLL_CTL1레지스터의 설정은 FLL+ Clock 모듈을 조절합니다. 또한 FLL+ 는 동작중에 소프트웨어적으로 기능을 변경될 수 있습니다

 

5.3    LOW POWER 에서 FLL + Clock

 

에너지 보호를 위해서는 낮은 클럭을 사용하며, 빠른 동작 속도 요구 할 때는 빠른 클럭을 사용합니다. 이때주의 해야 할 것은 작동온도와 공급전압에 따는 클럭 안정도를 생각해야 한다는 것입니다.

 

저 출력 동작을 위해 ACLK는 32768Hz의 크리스탈을 사용하는 것이 좋습니다. 인터럽트가 발생해서 고속 동작이 필요할 때는 DCO를 이용해 MCLK를 고속 동작 시키는 방법이 있습니다. 단 이때도 주의해야 할 것은 주파수가 안정될 시간이 필요하다는 것입니다.

 

5.4    LFXT1 오실레이터

 

LFXT1 오실레이터는 LF(low-frequency) mode (XTS_FLL = 0)에서 32768Hz의 크리스탈을 사용하여 ultra low 전류를 사용하도록 지원 합니다. 32768Hz 크리스탈은 Xin과 Xout에 별도의 부품없이 연결하여 사용할 수 있습니다.

 

LFXT1 오실레이터는 HF(high-frequency) mode (XTS_FLL =1)에서 고속 크리스탈 또는 레조네이터를 사용 할 수 있습니다. 고속 크리스탈이나 레조네이터도 별도의 부품 없이 Xin과 Xout 에 바로 연결되어 사용할 수 있습니다.

 

XCAPxPF bit는 LFXT1에 연결된 크리스탈에 내부적으로 1,6,8,10pF의 콘덴서를 단것처럼 만들어 줍니다. 부가적으로 외부 콘덴서가 필요하며 달아 사용하면 됩니다. 만약 MCLK용으로 사용하지 않는다면 OSCOFF를 이용해 LFXT1을 정지시킬 수 있습니다.

( SELM 이 3이 아닐 때 CPUOFF = 1이 된다.)

 

LFXT1에 저 주파수 크리스탈을 사용시 잡음 영향을 받을 수 있으므로 크리스탈을 최대한 pin 가까이 놓아야 합니다. 또한 기본적으로 XCAPxPF는 0으로 설정되어 있으므로 1pF의 값을 가집니다. 그래서 크리스탈이 불안전하게 동작할 수 있습니다. 그래서 초기에 XCAPxPF의 값을 조정해야 합니다.

 

5.5    XT2 오실레이터

 

몇몇 MSP430x4xx 칩은 XT2기능이 있습니다. XT2는 LFXT1의 HF mode 의 특성과 동일 하므로 XT2CLK를 HF mode 처럼 사용해야 합니다. 주의할 사항은 내부에 콘덴서 값을 가지지 않아 외부에 달아야 합니다. 만약 XT2CLK가 MCLK 또는 SMCLK로 사용되지 않는다면 XT2OFF에 의해 중지 할 수 있습니다.

 

5.6    Digitally-Controlled Oscillator (DCO)

 

DCO는 내부에서 동작하는 RC 특성을 가진 오실 레이터 입니다. DCO 주파수는 FLL에 의해 ACLK 의 N 배로 안정화 됩니다. 주파수는 SCFQCTL 레지스터의 bit6-bit0까지 설정 할 수 있습니다. DCOPLUS bit 설정으로 FDCOCLK 주파수는 FDCO 또는 FDCO/D가 됩니다.

 

FLLDx bit 설정으로 D의 값은 1,2,4,8중 한 가지로 설정 될 수 있습니다. 기본적으로 DCOPLUS 는 D=2가 되도록 설정되어 있습니다. 즉 FDCOCLK는 FDCO/2 가 됩니다.

 

SCFQCTL 과 DCOPLUS 의 설정에 따라 다음과 같이 DCOCLK가 조정됩니다.

DCOPLUS = 0 이면 FDCOCLK =(N+1) * FACLK

DCOPLUS = 1 이면 FDCOCLK =D * (N+1) * FACLK

 

5.7    DCO 주파수 범위

 

FDCO 의 주파수 범위는 아래의 그림 5-3 의 리스트에 따라 FNx의 bit에 따라 선택됩니다. DCO는 DCOCLK의 주어진 범위 내에서 동작하도록 합니다. 이때 이용자는 MCLK이 최대 동작 주파수를 넘지 않도록 설정해야 합니다.

 

그림 5 - 3

5.8    Frequency Locked Loop (FLL)

 

FLL은 연속적으로 상승 또는 하강하는 10bit의 주파수 적분기 입니다. SCFI1와 SCFI0의 조건에 따라 DCO는 주파수 적분기를 조절합니다. ACLK 크리스탈 주기에 맞추어 +1 또는 –1씩 조절 됩니다. 5개의 SCFI1의 bit7-bit3는 DCO주파수 tap을 설정합니다. 주파수 tap은 29개가 있으며 28-31까지는 주파수는 동일 합니다. 각각의 tap은 이전에 비해 주파수가 약 10%정도 높아 집니다. 변조기(Modulator)는 2개의 이웃하는 DCO 주파수를 섞어 줍니다. SCFI1의 2-0bit와 SCFI0의 1-0bit는 변조기를 위해 사용됩니다(이것은 자동으로 조절됩니다). DCO는 PUC(power up clear)후 가장 낮은 주파수로 동작합니다. (이유는 SCFI0와 SCFI1이 초기화 되기 때문입니다.) 먼저 일반적인 동작을 이해 DCO를 설정 해야 합니다. DCO는 하나의 ACLK주기내에 32가지의 DCLK 주기를 가질 수 있습니다.

 

그림 5 - 4

 

5.9    FLL와 Modulator 사용정지

 

FLL은 상태 레지스터의 SCG0가 1일 경우 정지 합니다. FLL 이 정지하면 DCO는 이전에 설정된 상태로 동작하나 DCOCLK이 자동으로 안정화 되지 않습니다. DCO는 SCFQ_M 이 0이면 정지됩니다. DCO가 정지되면 DCOCLK는 사용 가능한 DCO tap 에 맞추어집니다.

 

 

5.10    Low power 모드에서 FLL의 동작

 

인터럽트 서비스 루틴 동작시 SCG1, CPUOFF, OSCOFF의 설정은 제거 되지만 SCG0의 설정은 제거되지 않습니다. 이것은 LPM1-4에서 발생한 인터럽트루틴에서 FLL을 조작해야 하는 것을 뜻 합니다. FLL은 정지 상태이며 SCFI0와 SCFI1에 정의된 상태로 DCO는 동작합니다. FLL 조작이 필요 할 때는 SCFI0을 제어하면 됩니다.

 

  1. Buffered Clock Output

 

ACLK을 1,2,4,8로 나누어져(클럭속도가 빨라짐) P1.5에 출력될수 있습니다. 나누어지는 값은 FLL_DIV에 의해 선택되어 집니다. ACLK는 다른 핀에도 다중 출력이 되며 이때 ACLK out으로 설정 되어야 합니다.

 

 

5.12    FLL+ Fail-Sefe 동작

 

FLL+ module에는 오실레이터 고장에 대한 안전 기능이 있습니다. 안전기능은 그림 5-5와 같이 LFXT1, DCO, XT2의 고장을 찾을 수 있습니다.

 

그림 5 - 5

 

고장조건은 다음과 같습니다.

 

LF mode에서 LFXT1이 저 주파수 오실레이터 장애(LFOF)가 발생, HF mode 에서 LFXT1이 고 주파수 오실레이터 장애(XT1OF)가 발생, XT2의 고 주파수 오실레이터 장애(XT2OF) 발생, DCO의 DCO 장애 플래그(DCOF) 발생을 말한다.

크리스탈이 정확하게 움직이지 않는다면 크리스탈 오실레이터 장애 bit LFOF, XT1OF, XT2OF에 설정됩니다. 고장 되어 있는 동안 장애 bit는 설정되어 있으며 이상 없이 동작 하게 되면 자동으로 제거 됩니다.

LFXT1 크리스탈 장애시 ACLK는 발생되지 않습니다.

 

DCO가 가장 낮은 tap이 되면 SCFI1의 bit7-3번까지 지워집니다. 이때 DCOF가 발생됩니다. DCO가 가장 높은 tap일때도 DCOF는 발생 됩니다. DCOF는 가장높거나 가장 낮은 tap에서 벗어나면 자동으로 제거 됩니다.

오실레이터 장애(LFOF,XT1OF,XT2OF,DCOF)발생시 오실레이터 장애 인터럽트 플레그 (OFIFG)가 설정되거나 POR( power of reset)이 됩니다.

인터럽트가 동작하면 OFIE 는 자동으로 지워 집니다. 그러나 OFIFG는 프로그램에 의해 지워야 합니다. 인터럽트 루틴에서는 bit를 검사해 고장의 원인을 찾을 수 있습니다. 만일 고장이 MCLK 에 영향을 주면 자동으로 MCLK의 소스를 DCO로 변경합니다. 그러나 이 동작에 의해 SELMx bit의 설정을 바꾸지 않습니다. 그래서 SELMx bit는 프로그램적으로 변경 시켜야 합니다.

 

 

 

5.13    관련 레지스터 설명

 

SCFQCTL (system clock control register)

BIT 

명칭

SCFQ_M 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

SCFQ_M : 변조기(modulation)의 사용유무 설정 ( 0: 사용 ,1:비사용)

N     : 변조값,DCO에 사용될 변조값을 설정 한다.(아래 계산에서 N 값 조정)

DCOPLUS = 0 이면 FDCOCLK =(N+1) * FACLK

DCOPLUS = 1 이면 FDCOCLK =D * (N+1) * FACLK

 

 

SCFI0 (system clock frequency integrator register 0)

BIT 

명칭

FLLDx 

FN_x 

MODx(LSBs)

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

FLLDx     : Fdocclk의 D 값 조정 ( 00: /1 , 01: /2 , 10: /4 ,11 :/8)

FN_x     : DCO 의 동작 범위 설정

(0000:0.7-6Mhz, 0001:1.4–12Mhz, 001x:2.2-17Mhz, 01xx:3.2-25Mhz, 1xxx:5-40Mhz)

MODx    : 변조에 사용되는 변조값의 아래 bit 이 값은 FLL+ 에 의해 자동으로 조절 된다.

 

 

SCFI1 (system clock frequency integrator register 1)

BIT 

명칭

DCOx 

MODx(MSBs) 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

DCOx     : 이 bit는 DCO tap을 선택해서 자동으로 FLL+ 값을 조정하게 한다.

MODx     : 변조에 사용되는 변조값의 상위 bit 이 값은 FLL+ 에 의해 자동 조절 됩니다.

 

 

FLL_CTL0 (FLL+ Control Register 0)

BIT 

명칭

DCOPLUS 

XTS_FLL 

XCAPxPF 

XT2OF 

XT1OF 

LFOF 

DCOF 

초기값

읽고쓰기

R/W 

R/W 

R/W 

R/W 

 

DCOPLUS : DCO를 MCLK나 SMCLK에 출력할 때 FLLDx(D값) 사용 할 것인지 결정한다.

(0 : 사용한다. ,1: 사용하지 않는다.)

XTS_FLL : LFTX1 mode 를 선택한다. (0: 저 주파수 모드 , 1: 고 주파수 모드)

XCAPxPF : LFTX1 의 내부 콘덴서 값을 조정한다. (00 : 1pF , 01: 6pF , 10 : 8pF , 11 : 10pF)

XT2OF     : XT2오실레이터 장애 (1이면 발생)

XT1OF     : LFXT1의 고 주파수 오실레이터 장애 (1이면 발생)

LFOF     : LFXT1의 저 주파수 오실레이터 장애 (1이면 발생)

DCOF    : DCO 오실레이터 장애 (1이면 발생)

 

 

FLL_CTL1 (FLL+ Control Register 1)

BIT 

명칭

사용안함

SMCLKOFF 

XT2OFF 

SELMx 

SELS 

FLL_DIVx 

초기값

0

읽고쓰기

R/W 

R/W 

R/W 

R/W 

R/W 

R/W 

 

SMCLKOFF : SMCLK 사용금지 선택 ( 0: SMCLK 사용 , 1 : SMCLK 사용금지)

XT2OFF : XT2 오실레이터 사용금지 선택

(0 : XT2 사용, 1: MCLK나 SMCLK 용으로 사용안할 때 사용금지 )

SELMx : MCLK의 소스 선택 (00:DCOCLK , 01:DCOCLK ,10:XT2CLK, 11:LFXT1CLK)

SELS    : SMCLK의 소스 선택 (0: DCOCLK , 1: XT2CLK)

FLL_DIVx : ACLK의 나눌값 선택 (ACLK/n 의 n 값) (00 : /1 , 01:/2 , 10:/4 , 11:/8)

 

 

IE1 (Interrupt Enable Register 1)

BIT 

명칭

      

OFIE 

 

초기값

      

 

읽고쓰기

      

R/W 

 

 

OSC 인터럽트 장애 인터럽트 동작 유무 설정 (0 : 인터럽트 동작 안함, 1: 인터럽트 동작)

 

 

IFG1 (Interrupt Flag Register 1)

BIT 

명칭

      

OFIFG 

 

초기값

      

 

읽고쓰기

      

R/W 

 

 

인터럽트가 발생되는지 알려준다. (0: 인터럽트 조건이 아님 , 1: 인터럽트 조건)

 

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15
[MSP430] MSP430 자료 1  (0) 2012.11.15

 

  1. RISC 16bit CPU의 특징

4.1    특징

 

MSP430의 CPU는 C와 같은 고급 언어들의 사용을 편리하도록 설계되어 있습니다. 또한 CPU는 페이지 처리 없이 모든 어드레스 영역을 인식 할 수 있습니다.

CPU는 27개의 명령과 7개의 번지지정이 가능한 RISC 구조 입니다. 모든 번지 지정 방법을 사용할 수 있는 명령 구조 이며, PC, SR, SP는 일반적으로 사용될 수 있습니다. 명령은 한 클럭에 실행 되어 집니다. 16bit 레지스터를 이용해 16bit 단위로 메모리가 사용 될 수 있습니다. 16bit어드레스 버스로 모든 메모리 영역을 사용하며 16bit 데이터 버스는 byte, word 단위로 사용 가능하게 합니다. 메모리에서 메모리로 이동하는 연산이 처리 가능합니다.

CPU는 16개의 16bit 레지스터를 가지고 있습니다. R0-R3까지 기능을 가진 레지스터가 있고 R4-R15까지 일반적으로 사용되는 레지스터를 가지고 있습니다. 그림4-1에서 CPU를 확인 할 수 있습니다.

그림 4 - 1

4.2    Program Counter (PC)

 

16bit의 Program Counter (PC) 는 다음에 실행될 명령의 주소를 알려줍니다. 짝수 번지 단위로 이동되며 64K 내에 어떤 곳이나 선택이 가능합니다. (그림 4-2는 PC 입니다.)

 

그림 4 - 2

 

4.3    Stack Pointer (SP)

 

스텍 포인터는 서브루틴이나 인터럽트에서 복귀하는 주소를 저장 합니다. SP는 RAM에 초기화되며 짝수 어드레스 단위로 사용자에 의해 지정될 수 있습니다. (그림 4-3는 SP 입니다.)

 

그림 4 - 3

 

4.4    Status Register (SR)

 

상태 레지스터는 word 단위 명령으로만 사용이 가능합니다. 내용은 그림 4-4와 같습니다.

그 내용을 살펴보면 다음과 같습니다.

그림 4 - 4

 

V

산술연산결과의 값이 사용되는 범위를 넘으면 생성 됩니다.

SCG1

설정되면 SMCLK 정지 됩니다.

SCG0

만약 DCOCLK MCLK이나 SMCLK 사용되지 않는다면 설정되면 DCO 정지 됩니다.

OSCOFF 

설정되면 오실레이터 정지, LTXT1CLK MCLK, SMCLK 사용되지 않을 설정되면 LFXT1 크리스탈이 정지 됩니다.

CPUOFF

설정되면 CPU 정지

GIE

설정되면 모든 maskable 인터럽트는 정지 됩니다.

N

bit 설정되면 byte 또는 word 명령처리 음수의 값을 가진다면 설정 됩니다.

예를 들어 word 명령 처리 15bit 1이면 음수 이고, byte 명령처리 7bit 1이면 음수가 됩니다.

Z

연산결과가 0이면 설정 됩니다

C

byte 또는 word 명령일 자리올림이 발생하면 설정됩니다.

 

4.5    Constant Generator Registers CG1과 CG2

 

상수 생성 레지스터 CG1과 CG2 가 있습니다. 이 레지스터는 상수 연산시 자동으로 사용됩니다. 어셈 명령은 자동으로 6개의 상수 방식을 사용하며 이때 CG1과 CG2를 자동으로 사용됩니다.

 

4.4    일반적인 레지스터

 

12개의 일반적인 레지스터는 모두 data, 어드레스 주소의 인텍스 값 등으로 사용됩니다. 또한 byte 또는 word 단위 연산으로 사용할 수 있습니다. 16bit 레지스터 에서 8bit 이동 시 그림4-5와 같습니다.

 

그림 4 - 5

 

 

 

 

 

 

4.5    어드레스 모드

 

ASM 명령의 몇 가지 사항을 살펴 보고 넘어가 보겠습니다. 추후 www.mcuworld.com 에 소개되는 거의 대부분의 source 는 C 언어로 되어 있을 것입니다. 그러나 ASM 이 필요할 때를 대비하여 약간의 부연 설명만 하겠습니다.

 

어드레스 모드는 source 를 지정 할 수 있는 7가지 번지 지정방식과 destination 를 지정할 수 있는 4가지의 번지지정 방식을 사용하여 원하는 주소에서 연산이 가능하도록 합니다.

 

4.6    Register 모드

레지스터를 바로 지정하는 방식으로 레지스터에서 레지스터로 값을 연산할 때 사용합니다.

    

예) mov r10,r11

-> r10에 값 10이 저장되어 있고 R11에 15가 저장되어 있을 때 위에 명령을 처리하면 R11 은 10으로 변경된다.

 

4.7    Indexed 모드

 

레지스터에 저장되어 있는 값에서 설정된 값을 더한 주소에서 설정된 레지스터로 연산할 때 사용합니다.

 

예) mov 2(R5),6(R6)

-> 만약 R5에 0x1000이 저장되어 있고 R6에 0x2000 이 저장되어 있다면 (0x1000+2)번지에서 (0x2000+6)번지로 값이 이동된다.

 

4.8    Symbolic 모드

 

임의의 값을 문자로 지정하여 이 지정된 값을 (PC + 값) 연산한 번지에서 값을 연산한다.

 

예)mov AAA,BBB

->만약 AAA가 0x1000 으로 설정되어 있고 BBB가 0x2000 로 설정되어 있으면 0x1000+PC 번지의 값이 0x2000+PC 번지로 이동된다.

 

 

 

 

4.9    Absolute 모드

 

절대번지를 설정하여 사용한다.

 

예) mov &AAA,&BBB

->만약 AAA가 0x1000으로 설정되어 있고 BBB가 0x2000으로 설정되어 있으면 0x1000번지에서 0x2000번지로 값을 이동한다.

 

4.10    Indirect Register 모드

 

지정된 주소의 값을 이동할 때 사용한다. 만약 상호간의 변수의 값이 word, byte 와 같이 틀릴 때도 사용된다.

 

예)mov @R10, 0(R11)

-> R10의 값이 0x1000 이고 0x1000번지내에 워드 data가 존재하고 R11 이 0x02A7을 가지고 있고 0x02A7 번지내에 byte 단위의 data가 존재한다면 0x1000번지 내의 워드의 값 중 높은 값이 0x02A7번지에 이동된다.

 

4.11    Indirect Autoincrement 모드

 

Indirect Register 모드와 비슷하나 처리 후 소스에서 지정한 레지스터의 값이 증가한다. 즉 번지를 증가한다.

 

예) mov @r10+, 0(R11)

-> R10의 값이 0x1000이고 R11의 값이 0x2000 이면 0x1000번지의 값이 0x2000번지에 저장되며 R10의 값은 0x1002로 변경된다.

 

4.12    Immediate 모드

 

상수값을 정의된 주소로 저장한다.

 

예)mov #45h,TTTT

-> TTTT의 값이 0x1112 이면 0x0045의 상수가 0x1112+PC가 가르키는 주소에 저장된다.

 

 

그 외에 ASM명령의 경우 ADC.W와 같이 .W를 사용한 경우 word 연산을 수행하며 .B를 사용한 경우 byte 연산을 수행합니다. 아무것도 사용하지 않을 경우 word 연산을 수행합니다.

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15
[MSP430] MSP430 자료 1  (0) 2012.11.15

 

  1. MSP430x4xx 의 System Reset, Interrupts, Operating Mode

 

  1. 시스템 리셋과 초기화

 

그림4와 같이 크게 power-on reset(POR)과 power-up clear(PUC)신호가 있습니다. 이 신호들은 여러 가지 이벤트들에 의해 Reset 신호가 발생되면 초기 조건에 따라 동작됩니다. 그 내용을 살표 보면 다음과 같습니다

 

그림 4

 

POR은 디바이스 자체 reset 입니다. POR은 최초 전원 공급시 와 _RST/NMI 핀에 LOW 신호가 걸릴 때 생성됩니다. PUC는 POR이 생성될 때 동시에 생성되며 PUC가 독립적으로 생성되었을 때 POR이 발생 되지는 않습니다. 그 외에 PUC는 watchdog timer가 동작중에 이벤트가 발생되거나 watchdog timer에 보안키가 위반되거나 flash 메모리의 보안키에 위반될 때 발생합니다.

 

모든 MSP430x4xx 디바이스는 brownout(전원감지) reset 회로를 가지고 있습니다. Brownout 회로는 VCC가 낮은 전압으로 입력되는 것을 감지하며 이때 POR 신호가 발생합니다.

VCC가 입력되고 VCC를 인식할 수 있는 VCC(start) 에서 동작을 시작합니다. Brownout회로는 VCC(b_it+) 전압이상이 되는 것은 인식한 후 Reset을 멈추며 다시 VCC(b_it-) 전압 이하가 되면 POR을 동작시킵니다. 자세한 사항은 아래 그림5를 참고해주세요.

 

그림 5

 

 

  1. 시스템 리셋후의 동작

 

시스템에 POR신호 발생된 후에 MSP430은 다음과 같은 동작을 합니다.

 

_RST/NMI pin은 reset mode로 설정, I/O는 input 모드로 변경, 모든 주변모듈(peripheral modules)및 레지스터는 초기화 상태레지스터(SR)은 reset, watchdog timer는 동작, 프로그램카운터(PC)는 인터럽트 백터 0xFFFE(reset 백터)로 설정 .

 

시스템 reset후에 사용자는 msp430을 초기화 해야합니다. 그것은 다음과 같습니다.

RAM에 위쪽에 SP를 초기화 , watchdog timer를 초기화 , 주변모듈을 설정, 부가적으로 watchdog timer, 오실레이터 장애,플레쉬 메모리 플레그 등을 reset source로 설정해야 합니다.

 

 

 

 

  1. 인터럽트

 

인터럽트 우선수위는 그림6 과 같습니다. CPU/NMIRS가 최고우선권을 가지며 Module 1에 가까우면 우선순위가 높아집니다. 인터럽트는 시스템 reset 인터럽트, (non)-maskable NMI 인터럽트, Maskable 인터럽트 3종류가 있습니다.

 

그림 6

 

  1. NMI 인터럽트

 

(Non)-Maskable Interrupts (NMI)는 general interrupt enable bit (GIE)로 마스크 될 수 없습니다. 즉 GIE로 NMI의 사용여부를 결정할 수 없다는 말이며, 사용 여부는 각각의 인터럽트 설정 bit인 ACCVIE, NMIIE, OFIE 로 설정 가능 합니다. NMI 인터럽트가 허가되면 상태에 따라 자동으로 reset 될 수 있습니다. 프로그램 시작 시 NMI 인터럽트의 벡타 주소를 0xFFFC 부터 설정 할 수 있으며, 사용자 소프트웨어는 기동시에 NMI인터럽트 사용bit를 다시 설정해야 합니다. (reset시 기존의 상태를 보관하지 않습니다.) NMI 인터럽트는 3가지의 소스, 즉 _RST/NMI pin에 에지가 발생, Oscillator 장해, 플레쉬 메모리 접근 위반 일 때 발생됩니다.

다음 그림7 에서 볼 수 있습니다.

 

그림 7

_RST/NMI pin은 최초 전원 인가 시(Power-up)에 reset mode로 설정됩니다. _RST/NMI의 기능은 WDTCTL에 의해 설정되며, 만약 _RST/NMI가 reset mode로 설정되어 있으면, CPU는 _RST/NMI가 Low로 유지되고 있는 동안 Reset을 하고 있다가 _RST/NMI pin이 High가 되면 CPU는 0xFFFE에서 다시 동작 되게 됩니다. 만약 _RST/NMI가 NMI기능으로 설정되면 NMIES bit 에 위해 선택되어진 신호가 발생할 때 NMIIE bit가 설정되어 있으면 NMI 인터럽트가 발생 됩니다.

 

Oscillator 장해신호는 crystal Oscillator가 문제가 발생되었을 때 발생됩니다. OFIE bit가 설정되어 있어야만 Oscillator 장해신호 발생시에 인터텁트가 발생되며 OFFIFG 플레그는 NMI가 OSCF에 의해 의해서 영향을 받았는지 결정할 수 있도록 NMI 서비스 루틴에서 프로그램적으로 검사되어야 합니다.

 

Flash 접근위반이 발생하면 ACCVIFG flag는 1로 설정 됩니다. ACCVIE bit 를 설정해서 flash 접근위반이 발생할 경우 NMI 인터럽트가 발생됩니다. ACCVIFG flag는 NMI 루틴에서 확인할 수 있습니다.

 

NMI는 특이하게 멀티 source (/RST/NMI pin에 에지가 발생, Oscillator 장해, 플레쉬 메모리 접근 위반)에 의해 인터럽트가 발생됩니다. 즉 NMIIE,OFIE,ACCVIE 를 설정 함으로서 인터럽트를 발생할 수 있습니다. 사용자에 의한 인터럽트 처리루틴의 예는 그림8과 같습니다.

 

그림 8

 

주의해야 할 점은 ACCVIE, NMIIE,OFIE 는 NMI 루틴에서 설정되면 안됩니다. RETI (인터럽트 복귀명령)전에 또 다른 인터럽트가 발생하여 스텍이 오버플로우 될 수 있습니다.

 

  1. Maskable 인터럽트

 

Maskable 인터럽트는 watchdog timer overflow를 포함한 주변장치들에 의해 영향을 받습니다. 각각의 인터럽트는 허가 bit가 있어 사용을 설정할 수 있으며 모든 인터럽트는 SR의 GIE bit로 사용을 설정할 수 있습니다. 인터럽트를 사용하기 위해서는 GIE bit 설정이 꼭 필요 합니다. 설정하지 않으면 인터럽트가 발생되지 않습니다. 물론 이전에도 설명하였지만 NMI는 GIE와 상관이 없습니다.

인터럽트 발생 후 처리까지는 모두 6 cycle이 필요합니다. 그리고 인터럽트 서비스 루틴이 처리됩니다. 그 과정을 살펴보면 다음과 같습니다. 먼저 수행되고 있는 명령 처리가 완료되고 PC를 스텍에 넣습니다. 다시 SR을 스텍에 넣으며 가장 우선순위 인터럽트는 처리되고 중복되어 발생된 낮은 인터럽트는 처리 대기 됩니다. 해당 인터럽트 요구 플레그는 자동으로 reset되고 대기되고 있는 인터럽트는 계속 대기 되고 있습니다. SCG0를 제외한 SR은 지워지고 이로 인해 low power 모드는 종료됩니다. 인터럽트 백터가 PC에 실려 인터럽트 처리 루틴으로 점프합니다. 그림9 를 보면 인터럽트 발생전과 발생후의 SP의 모습을 볼 수 있습니다.

그림 9

인터럽트 루틴의 종료는 RETI 명령에 의해 실행됩니다. 인터럽트에서 복귀하기 위해서는 5 cycle 이 필요합니다. 스텍에 저장된 SR을 복귀하고 GIE, CPUOFF등의 모든 정보를 복귀한 후 스텍에 저장된 PC 위치로 이동합니다. 그리고 이전에 중지된 루틴을 다시 수행합니다.

그림 10

인터럽트 백터와 POWER-UP 시작위치는 0xFFFF 에서 0xFFE0까지 위치합니다. 백터 위치는 그림11 과 같습니다.

그림 11

SFR 에는 각종 인터럽트 enable bit,flag 등이 있습니다. 자세한 내용은 SFR 설정부분을 참고해야 합니다.

 

  1. 동작 모드

 

MSP430은 Ultralow-power용 장비에 사용되기 위해 설계 되어 있습니다. 그림 2-8과 같은 동작모드가 존재합니다. 동작모드를 어떻게 사용할 것인지는 3가지를 고려한 후 선택해야 합니다. 그것은 Power를 어떻게 쓸 것인지, 동작속도를 어떻게 할 것인지, 디바이스를 어떻게 사용할 것인지 입니다. 그에 따라 동작모드를 선택 해야 하며 전류 소모량 또한 차이가 납니다.

 

동작모드는 AM, LPM0에서 LPM4까지 있습니다. LPM0 에서 LPM4까지는 CPUOFF, OSCOFF, SCG0, SCG1에 의해 설정됩니다. 이들 bit들은 상태 레지트터(SR)에서 제어 되도록 되어 있습니다. 이로 인해 현재동작동중인 모드가 인터럽트 서비스 루틴이 동작되는 동안 자동으로 스텍에 저장되게 됩니다. 만약 저장되어 있는 SR 값이 인터럽트 서비스 루틴 동안 변경되지 않는다면 인터럽트 종료 후 이전동작 모드로 돌아가게 됩니다.

다른 동작 모드로 동작 하려면 인터럽트 서비스 루틴에서 SR을 조절하면 됩니다. Mode 제어비트와 스택은 어떤 명령으로도 접근이 가능하므로 제어비트로 조정하면 바로 동작 모드가 변경되게 됩니다. 정지된 clock을 사용하는 주변장치는 자동으로 정지되며, 주변장치는 자신의 제어 레지스터에 의해서도 정지 될 수 있습니다. 모든 I/O port의 pin과 RAM/register는 값을 유지하며, 정상동작으로 전환은 모든 인터럽트를 통하여 가능하게 됩니다.

 

SCG1 

SCG0 

OSCOFF 

CPUOFF 

MODE 

CPU 상태

0

0

0

0

active 

CPU 동작, 모든 클럭 동작

0

0

0

1

LPM0

CPU,MCLK 정지 , SMCLK,ACLK 동작

0

1

0

1

LPM1

CPU,MCLK,DCO 정지,

MCLK,ACLK 동작모드에서 DCO를 사용 안하면 DC generator 정지,

SMCLK,ACLK 동작

1

0

0

1

LPM2

CPU,MCLK,SMCLK,DCO 정지,

DC generator 사용가능 , ACLK 동작

1

1

0

1

LPM3

CPU,MCLK,SMCLK,DCO 정지,

DC generator 정지 , ACLK 동작

1

1

1

1

LPM4

모든 동작 정지

 

 

  1. Low power mode 의 사용

 

MSP430은 Low power mode에서 어떤 이벤트가 발생되면 동작 모드를 전환할까요?

인터럽트 서비스 루틴에 들어갈 때 먼저 PC및 SR을 스텍에 저장하고 CPUOFF, SCG1, OSCOFF 비트를 자동으로 reset 하게 되어 동작모드가 전환 되며, 인터럽트 서비스 루틴에서 빠져 나올 때는 SR을 스텍에서 복귀하고 동작모드가 복귀됩니다. 만약 인터럽트 복귀 전에 stack에 있는 SR bit를 수정한다면 동작모드를 변경 할 수 있습니다.

 

MSP430은 온도 특성을 가지고 있습니다. 문제는 영하에서 DCO를 low power 모드 사용을 위해 사용을 안 할 때 입니다. 만약 온도변화가 심할 때 low power 모드가 되었고 특별히 동작 모드를 조정하지 않는 다면 wake-up시에 DCO 주파수는 대단히 달라질 수 있습니다.

이런 것을 피하기 위해서 DCO 주파수는 low power 모드에 들어가기 전에 가장 낮은 값으로 변화 시켜야 합니다.

 

LPM3는 MSP430의 Clock 시스템을 사용하여 최저의 파워를 소모하는 상태입니다. LPM3의 소비전력은 RTC동작전류와 모든 인터럽트가 실행되는 것을 합해서 2uA가 안됩니다.

32Khz의 크리스탈은 ACLK를 위해 사용 되어지며 6uS만에 안정화되는 DCO는 CPU 클럭으로 활용됩니다.

 

 

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 1  (0) 2012.11.15

 

 

2 MSP430x4xx 의 구조

  1. 구조

그림 1

 

MSP430은 16bit RISC구조의 CPU, 주변장치(peripherals), 사용자에 의해 조절이 가능한 클럭을 가지고 있습니다. 어드레스 버스와 메모리버스가 하나로 통합되어 있으며, 메모리 MAP 내에 아날로그와 디지털 주변장치가 포함되어 있어 많은 신호가 포함된 장비에 효과적으로 사용 될 수 있습니다.

 

MSP430은 Ultralow-power 시스템이라고 자랑할 만큼 전력 소모량이 적으며 그 때문에 battery 시스템에도 효과적입니다. (예를 들어 RAM에 Data를 보유만 할 경우 0.1uA , Real-time 동작시 0.8uA, 일반 동작 중에는 250uA의 전류를 소모한다고 되어 있습니다.)

 

정밀한 아날로그 회로가 포함 되어 있으며 살펴보면 ADC,DAC,비교기,전압 감시기 등 입니다.

ADC의 경우 12bit 또는 10bit의 ADC로 200ksps속도와 온도센서 레퍼런스가 포함되어 있습니다.

DAC의 경우에도 12bit 두개로 구성되어 있습니다. (모델별 세부사항은 틀릴 수도 있습니다.)

 

MSP430은 16bit RISC 구조로 16bit명령어를 사용하여 명령처리를 위한 병목현상이 제거 되었으며, 작은 core 구조설계로 소비전력이 줄어들었으며, 고급 프로그래밍(C 언어등을 사용한)위해 명령이 체적화 되었습니다. 예를들어 ASM명령어는 27개만 존재하나 7개의 어드레스 모드가 존재해 사용상의 불편이 없습니다. 그와 더불어 다양한 인터럽트 백터를 가지고 있어 활용이 용이 하도록 하였습니다. MSP430은 In-system programmable 한 Flash를 가지고 있어 사용 중 코드변경이 용이합니다.

 

 

  1. 클럭시스템

 

클럭시스템은 전지를 사용한 어프리케이션에 사용될 수 있을 정도로 저전력으로 디자인 되어 있습니다. 저전력모드에 가장 큰 특징은 클럭시스템 이 동작모드에 따라 변경된다는 점입니다. 예를 들어 ACLK는 32Khz부터 동작이 가능합니다. ACLK는 Real-time 클럭이나 Wake-up 함수 동작용으로 사용되면 좋도록 되어있습니다. 그러나 고속으로 사용시에는 DCO를 이용하여 CPU에서 사용되는 고속의 기준 클럭(MCLK)을 만들어 낼 수 있습니다. 고속 클럭 전환 후 대략 6us 이내에 클럭 이 안정화가 됩니다. 일반적으로 낮은 주파수의 보조 클럭은 저전력을 위한 대기모드에서 사용되며 고속 처리로 전환 시 DCO에서 고속 기준 클럭을 발생해 사용하게 됩니다.

 

 

  1. Emulation

 

MSP430은 내부에 Emulation 을 할수 있도록 Jtag/debug 블록을 가지고 있습니다. 이는 Jtag장비를 이용해 MSP430의 동작을 확인할 수 있으며 장비 개발 시 아주 유용하게 사용될 수 있습니다. 예를 들어 최고 속도로 MSP430이 동작하는 중에도 break point나 single step디버깅이 가능합니다. 물론 내부 레지스터나 메모리의 값도 확인 및 수정이 가능합니다. (자세한 사항은 WIZ MSP430 JTAG 매뉴얼을 참고하여 주세요. )

 

 

  1. 메모리

 

MSP430은 von-Neumann 구조를 바탕으로 한 어드레스 공간내에 SFR, 주변장치(peripherals), RAM, FLASH/ROM 등이 존재합니다. (비슷한 어드레스 구조를 가지고 있는 것으로는 68HC11이 있으며 AVR이나 8051등과는 다른 어드레스 구조를 지닙니다.)

그림 2는 메모리 MAP에서 위에 설명을 보기 편하도록 되어 있습니다. 단 주의할 사항으로는 code는 even address 에서만 읽는 것이 가능하며, data는 byte 또는 word (2byte) 또는 두 가지 모드를 전부 지원하기도 합니다. 그러므로 쓰고자 하는 어드레스에서 어떤 식으로 읽고 써야 하는지를 판단해서 사용해야 합니다. 그리고 메모리의 모든 공간은 64kbyte로 한정되어 있습니다.

 

그림 2

 

FLASH/ROM은 사용되는 디바이스에 따라 차지하는 어드레스 양이 달라집니다. 그러나 모든 FLASH/ROM의 끝은 0xFFFF 입니다. FLASH 는 code 또는 data 용으로 모두 사용될 수 있습니다.

여러 word 또는 byte단위의 자료를 RAM에 저장한 후 복사하여 FLASH/ROM에 저장할 필요 없이 바로 저장 할 수 있습니다. 인터럽트 벡터가 FLASH/ROM의 0xFFE0부터 16word를 사용하므로 이 부분사용은 주의해야 하며, 우선순위가 가장 높은 인터럽트 벡터는 0xFFFE 번지에 들어갑니다.

 

RAM 은 0x0200번지부터 시작됩니다. 사용되는 디바이스에 따라 어드레스 공간이 달라지며, RAM 또한 code 또는 data로 사용될 수 있습니다. 메모리 공간은 사용자의 필요에 따라 임의대로 사용 할 수 있어 그만큼 편리합니다.

 

  1. 주변장치(peripherals),SFR

 

주변장치(peripherals)는 0x0100에서 0x01FF 사이에 16bit구조로 되어 있습니다. 이 공간은 word 단위의 명령으로만 읽는 것이 가능하며 만약 byte단위로 읽으면 even 어드레스에서 만 값이 읽어지며 그 외 어드레스에서는 0이 출력됩니다. 그 외에 8bit 방식의 주변장치는 0x0010에서 0x00FF 까지 존재합니다. 이곳은 byte 단위의 명령만 사용될 수 있으며 word 단위 명령 사용하여 읽기를 하면 낮은 byte의 값만 정확하며 높은 byte의 값은 예상치 않은 값이 나올 수 있으므로 주의해야 합니다. 이곳에서 Word 단위의 쓰기명령은 낮은 byte만 써지고 높은 byte는 무시됩니다.

SFR(special function Registers)는 0x0000에서 0x000F까지 사용되며 몇 가지 주변장치를 설정할 때 사용됩니다. Byte 명령에 의해 조작이 가능합니다. SFR(special function Registers)와 주변장치(peripherals)의 자세한 사항은 해당 매뉴얼을 참조해야 합니다.

 

  1. 메모리의 사용

 

메모리에 data를 저장할 때 주의해야 할 점이 있는데, 그림3과 같이 byte는 순서대로 위치됩니다. 그러나 word는 high byte는 high address에 low byte 는 low address 에 위치됩니다. 특히 어셈을 이용한 프로그램을 할 경 우 주변장치(peripherals)등을 참조 시 주의해야 합니다.

그림 3

'공부 > MSP430' 카테고리의 다른 글

[MSP430] MSP430 자료 6  (0) 2012.11.15
[MSP430] MSP430 자료 5  (0) 2012.11.15
[MSP430] MSP430 자료 4  (0) 2012.11.15
[MSP430] MSP430 자료 3  (0) 2012.11.15
[MSP430] MSP430 자료 2  (0) 2012.11.15

5 타이머 카운터 (PWM)

5.1 특징 및 기능

동일한 기능의 16bit 타이머가 3개(TC0,TC1,TC2)가 존재 한다. 3개의 외부 입력 클럭 입력, 5개의 내부 클럭 입력, 2개의 I/O 단자 중 source 원으로 선택 해서 사용이 가능하다. 각각의 타이머는 인터럽트 발생도 가능하다. 5개의 내부 클럭 입력은 MCLK 를 가공해서 입력되며 그 주파수는 아래와 같다.

타이머 의 블록도는 아래와 같다.

SYNC를 이용해 3개의 타이머를 동기되어 동시에 동작시키는 것도 가능 하다. 타이머 카운터는 기본적으로 클럭이 입력되지 않아 동작이 되지 않는 상태 이다. 즉 PMC에서 타이머 사용을 하도록 설정해야 한다. 인터럽트 사용을 위해서는 AIC 의 TC 를 설정해서 사용이 가능하도록 해야 한다.

 

5.2 타이머

 

16bit 타이머는 클럭에 따라 증가를 하며 증가값이 0xFFFF -> 0x0000 이 되면 TC_SR 레지스터의 COVFS 가 설정 되며, 이런 기능을 이용해 타이머를 사용 한다. 외부 입력 신호 XC0,XC1,XC2는 TCLK0~TCLK2 또는 TIOA0 ~ TIOA2중(TIOA는 자기 채널은 자신이 선택하지 못한다.) 하나를 선택해서 사용한다. 외부 클럭은 MCK 보다 2배 이상 주파수가 낮아야 사용을 할 수 있다.

 

 

타이머의 동작모드는 Capture Mode , Waveform Mode 로 나누어 지며, 이는 TCx_CMR

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 10  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

4 인터럽트

 

4.1 특징 및 기능

인터럽트 source 는 32이며, 8레벨의 우선순위가 있다. 각각의 인터럽트를 살리는 것이 가능하고, 벡터 인터럽트 및 빠르게 인터럽트를 처리하는 인터럽트도 있다. 인터럽트가 발생하면 그 조건을 판단하여 nFIQ,nIRQ인터럽트가 발생한다. 외부 입력 인터럽트는 high level, low level, positive edge, negative edge 중 하나를 선택하며, 인터럽트 source 0 는 무조건 FIQ 에 사용한다. 인터럽트 source 1은 특정 주변장치(PMC, DBGU, RTT, PIT, EFC)와 연결이 되어 있어서 인터럽트 발생시 인터럽트 루틴에서 어떤 주변장치의 인터럽트인지 판단하여 해당 조건의 처리를 실시 해야 한다. 인터럽트 source 2~31은 주변장치와 외부 인터럽트로 사용한다.

AIC_SMRx를 이용해 내부 인터럽트를 레벨 또는 트리거 모드중 어떤 것을 사용 할 것인 결정하고, 외부 인터럽트는 high level, low level, positive edge, negative edge 중 하나를 선택 한다.

또한 edge detector는 AIC_ISCR,AIC_ICCR로 설정해 edge에 따른 제어를 할 수 있다.

 

nIRQ 인터럽트가 처리중에 좀더 높은 인터럽가 발생하면 좀더 높은 인터럽트를 먼저 처리 하며, 낮은 인터럽가 발생 하면, 해당 인터럽트는 AIC_EOICR에 기억되어 인터럽트 처리가 가능할 때까지 대기 하다 실행한다. 인터럽트 중간에 발생하면 이전 인터럽트의 상태가 8번까지 내부 스택에 저장 되어질수 있다. nFIQ 인터럽트가 발생되면 nIRQ보다 nFIQ가 먼저 실행된다.

Spurious 인터럽트는 인터럽가 발생되었는데 인터럽트 처리루틴에서는 인터럽트가 존재 하지 않는 상태를 만한다. 이때는 임시로 처리하고 최대한 빨리 원리 루틴으로 돌아 간다.

 

 

 

 

AIC Source Mode Register

  • SRCTYPE : 인터럽트 소스의 형태

  • PRIOR : 우선순위 0~7 까지 7이 가장 높음

 

AIC Source Vector Register

  • 인터럽트 백터의 어드레스를 지정한다.

 

 

AIC Interrupt Vector Register

- 현재 발생된 인터러트 백터, 에러인경운 AIC_SPU 레지스터값을 가짐

 

AIC FIQ Vector Register

- 현재 발생된 인터러트 백터, 에러인경운 AIC_SPU 레지스터값을 가짐

 

 

 

 

AIC Interrupt Status Register

현재 발생된 인터럽트 소스 번호를 알려줌

 

AIC Interrupt Pending Register

1 : 인터럽트가 대기중인 것을 알려줌

 

AIC Interrupt Mask Register

1 : 인터럽트가 사용가능한지 확인한다.

 

AIC Core Interrupt Status Register

nIRQ: nIRQ가 발생함, nFIQ : nFIQ가 발생함

 

AIC Interrupt Enable Command Register

1 : 인터럽트를 사용가능 하도록 설정 한다.

 

AIC Interrupt Disable Command Register

1 : 인터럽트를 사용 불가능 하도록 설정 한다.

 

AIC Interrupt Clear Command Register

- 인터럽트의 에지를 삭제 한다.

 

AIC Interrupt Set Command Register

- 인터럽트의 에지를 설정한다.

 

AIC End of Interrupt Command Register

- 인터럽트 처리를 종료할 때 쓰는 레지스터

 

AIC Spurious Interrupt Vector Register

- 잘봇된 인터럽트 발생시 처리를 위한 벡터 어드레스 설정

 

 

 

AIC Debug Control Register

  • GMSK : 1: nIRQ,nFIQ를 동작 금지
  • PROT : 1: 보호 모드 사용

 

AIC Fast Forcing Enable Register

- FIQ 인터럽트로 사용하도록 설정

 

AIC Fast Forcing Disable Register

- FIQ 인터럽트롤 사용하지 못하도록 설정

 

 

 

 

AIC Fast Forcing Status Register

- FIQ 인터럽트로 사용가능한지 상태를 확인

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 11  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 9  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

 

3 입출력 I/O

 

3.1 특징 및 기능

PIO는 32bit의 프로그램 가능한 병렬 I/O를 제어 한다. I/O 포트는 PA0~ PA31로 표기되며, 필요에 따라 주변장치 연결용으로 사용되는 특수기능으로 정의 될 수 있다. 10K pull-up을 내부적으로 사용할 수 있으며, 오픈드레인 출력지원, 1/2이하의 클럭 신호를 무시하는 글리치 필터 지원, 각 핀 별로 인터럽트 발생이 가능 하다.

클럭이 공급되어야 동작하므로 reset 후에는 클럭을 공급해야 한다. PA0~PA4 까지는 3.3V에서 16mA 까지 출력 가능하고,PA5~PA20 까지는 2mA, PA21~PA31까지는 8mA 까지 출력이 가능하다.

RESET 후 내부 10K pull-up은 사용하지 않으므로 PIO_PUER 레지스터로 pull-up을 설정 해야 한다. 또한 특수 기능을 사용하기 위해서는 RESET 후에 PIO_PER 레지스터를 설정해서 특수기능으로 제어 해야 한다.

I/O출력값을 high로 설정은 PIO_SODR로 하고, low 출력은 PIO_CODE로 한다. 그외에도 출력 는 입력 모드 설정을 해야 한다. 출력을 한번에 하기 위한 별도의 레지스터가 있으며, 오픈드레인 모드로 사용시 pull-up 저항 사용시 3.3V 뿐만 아니라 5V 로직 동작도 가능하다. 추가적으로 각각의 포트는 상승/하강 에지 모드에서 인터럽트 발생이 가능하다.

 

 

* 모든 레지스터는 P0~P31 까지로 동일해 레지스터는 표기하지 않습니다.

 

PIO Controller PIO Enable Register

NAME : PIO_PER , Access Type: Write_only

  • 1: 일반 I/O 모드로 동작

 

PIO Controller PIO Disable Register

NAME : PIO_PDR , Access Type: Write_only

  • 1: 주변장치 용으로 동작

 

PIO Controller PIO Status Register

NAME : PIO_PSR , Access Type: Read_only

  • 0 : 주변장치 용으로 사용 , 1 : I/O 용으로 사용

 

PIO Controller Output Enable Register

NAME : PIO_OER , Access Type: Write_only

  • 1 : 출력으로 설정

 

 

PIO Controller Output Disable Register

NAME : PIO_ODR , Access Type: Write_only

  • 1 : 출력 해제

 

PIO Controller Output Status Register

NAME : PIO_OSR , Access Type: Read_only

  • 1: 출력모드 , 0 : 입력 모드

 

PIO Controller Input Filter Enable Register

NAME : PIO_IFER , Access Type: Write_only

  • 1: 입력에 필터 사용

 

PIO Controller Input Filter Disable Register

NAME : PIO_IFDR , Access Type: Write_only

  • 1: 입력에 필터 사용 안함

 

PIO Controller Input Filter Status Register

NAME : PIO_IFSR , Access Type: Read_only

  • 1 : 필터 사용 상태 , 0 : 필터 사용 안함

 

PIO Controller Set Output Data Register

NAME : PIO_SODR , Access Type: Write_only

  • 1 : high로 출력 함

 

PIO Controller Clear Output Data Register

NAME : PIO_CODR , Access Type: Write_only

  • 1 : low로 출력 함

 

PIO Controller Output Data Status Register

NAME : PIO_ODSR , Access Type: Read_only or Read/Write

  • 1 : 출력이 high로 되고 있다.

 

PIO Controller Pin Data Status Register

NAME : PIO_PDSR , Access Type: Read_only

  • 1 : 논리 상태가 high 임 , 0 : 논리 상태가 low 임

 

PIO Controller Interrupt Enable Register

NAME : PIO_IER , Access Type: Write_only

- 1 : 인터럽트 사용 가능

 

PIO Controller Interrupt Disable Register

NAME : PIO_IDR , Access Type: Write_only

  • 1 : 인터럽트를 사용하지 못하도록 한다.

 

PIO Controller Interrupt Mask Register

NAME : PIO_IMR , Access Type: Read_only

  • 1 : 인터럽트가 허용되어 있다.

 

PIO Controller Interrupt Status Register

NAME : PIO_ISR , Access Type: Read_only

  • 1 : 인터럽트가 발생되었다.

 

PIO Multi-driver Enable Register

NAME : PIO_MDER , Access Type: Write_only

  • 1 : 오픈드레인 모드로 동작

 

PIO Multi-driver Disable Register

NAME : PIO_MDDR , Access Type: Write_only

  • 1 : 오픈드레인 모드 금지

 

PIO Multi-driver Status Register

NAME : PIO_MDSR , Access Type: Read_only

  • 1 : 오픈드레인 모드로 동작한다.

 

PIO Pull Up Disable Register

NAME : PIO_PUDR , Access Type: Write_only

  • 1 : 내부 pull-up 을 사용하지 않는다.

 

PIO Pull Up Enable Register

NAME : PIO_PUER , Access Type: Write_only

  • 1 : 내부 pull-up 을 사용한다.

 

PIO Pull Up Status Register

NAME : PIO_PUSR , Access Type: Read_only

  • 1 : pull-up을 사용하지 않는다. , 0 : pull-up을 사용한다.

 

PIO Peripheral A Select Register

NAME : PIO_ASR , Access Type: Write_only

  • 1 : Peripheral A 가 사용한다.

 

PIO Peripheral B Select Register

NAME : PIO_BSR , Access Type: Write_only

  • 1 : Peripheral B 가 사용한다

 

PIO Peripheral A B Status Register

NAME : PIO_ABSR , Access Type: Read_only

  • 0 : Peripheral A 에서 사용함
  • 1 : Peripheral B 에서 사용함

 

PIO Output Write Enable Register

NAME : PIO_OWER , Access Type: Write_only

  • 1 : PIO_ODSR 을 Write/ Read 가능하게 한다.

 

PIO Output Write Disable Register

NAME : PIO_OWDR , Access Type: Write_only

  • 1 : PIO_ODSR 를 Read 가능하게 한다.

 

PIO Output Write Status Register

NAME : PIO_OWSR , Access Type: Read_only

  • 0 : PIO_ODSR 를 Read 가능하게 한다.
  • 1 : PIO_ODSR 을 Write/ Read 가능하게 한다.

 

 

'공부 > SAM7S' 카테고리의 다른 글

[SAM7S] AT91SAM7S 자료 11  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 10  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 8  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 7  (0) 2012.11.14
[SAM7S] AT91SAM7S 자료 6  (0) 2012.11.14

+ Recent posts