공부/RL78 2013. 4. 5. 20:23

 

 

4.1 특수 기능 레지스터 (sfr) 영역의 액세스 방법 레지스터 약칭 이름과 비트 이름 묘사

 

RL78 패밀리 컴파일러는 # pragma sfr 지령을 선언함으로써 SFR 역내 주변 I / O 레지스터에 액세스 있습니다. 설명하는 레지스터 이름은 설명서에 나와있는 레지스터 약어 이름 기재 비트 이름입니다.

주변 I / O 레지스터 이름 활성화 지정

레지스터 전체 액세스

1 비트 사용

 

 

레지스터 약칭 이름과 비트 이름 묘사 SFR 영역의 주변 I / O 레지스터의 액세스는 # pragma sfr 지령을 선언함으로써 가능해집니다.

# pragma sfr 지령을 선언하면

설명서 기재의 "레지스터 약칭 이름"에서 레지스터 전체 액세스 가능

설명서 기재가있는 비트는 "비트 이름"에서 1 비트 액세스가 가능합니다

 

 

 

 

기재되지 않은 비트는 레지스터 이름 뒤에 ". 비트 번호" 작성 하여 액세스 있습니다.

그러나 비트 번호에 대한 액세스는 1 비트 액세스 가능한 레지스터 이고 여러 비트를 모아 작업하는 경우 논리 연산이 필요합니다

비트 번호로 묘사

비트 번호로 묘사 SFR 영역의 주변 I / O 레지스터의 액세스는 # pragma sfr 지령을 선언함으로써 가능해집니다. # pragma sfr 지령을 선언하면

설명서언급없이 "등록 약칭 이름. 비트 번호"1 비트 액세스가 가능

그러나 1 비트 액세스 가능한 레지스터에 한함

또한 여러 비트를 모아 작업하는 경우 비트 논리가 필요합니다.

 

4.2 포트 포트 구성

포트 구성 위는 RL78/G14 P12 블록 다이어그램입니다. 모든 포트가 같은 블록 다이어그램은 없지만, 대표적인 포트의 블록도 생각하십시오. RL78/G14 포트는 대부분 입력 출력 포트 어느 것으로도 사용할 있고, 그것을 결정하는 레지스터 포트 모드 레지스터 (PMxx)입니다. 초기 상태는 입력 포트이며 단자에서의 입력 값은 포트 레지스터 (Pxx) 리드하는 것으로 읽을 있습니다. 또한 포트 모드 레지스터 (PMxx) 조작 출력 포트로 설정하면 포트 레지스터 (Pxx) (래치 ) 단자에서 출력됩니다. 또한 입력 포트에서 사용할 경우, 풀업 저항 옵션 레지스터 (PUxx) 내장 풀업 저항을 사용 수가 있습니다.

 

포트 모드 레지스터 (PMxx) 포트 레지스터 (Pxx)

포트 모드 레지스터 (PMxx) 포트 입력 / 출력을 1 비트 단위로 설정하는 레지스터입니다. 포트 모드 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, FFH됩니다.

포트 레지스터 (Pxx) 포트 출력 래치 값을 설정하는 레지스터입니다. 리드하면 입력 모드는 단자 레벨 출력 모드는 포트 출력 래치 값이 읽습니다. 포트 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H됩니다

 

.  

풀업 저항 옵션 레지스터 (PUxx) 포트 입력 모드 레지스터 (PIMxx)

풀업 저항 옵션 레지스터 (PUxx) 내장 풀업 저항을 사용하거나 여부를 설정하는 레지스터입니다. 풀업 저항 옵션 레지스터로 내부 풀업 저항의 사용을 지정한 단자에서 입력 모드로 설정 비트에만 비트 단위로 내부 풀업 저항을 사용할 있습니다. 출력 모드로 설정 비트는 풀업 저항 옵션 레지스터의 설정에 관계없이 내부 풀업 저항은 연결되지 않습니다. 겸용 기능의 출력 단자로 사용하는 경우도 마찬가지입니다. 풀업 저항 옵션 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H (PU4 01H)입니다.

포트 입력 모드 레지스터 (PIMxx) 입력 버퍼를 1 비트 단위로 설정하는 레지스터입니다. 다른 전위의 외부 장치와 시리얼 통신시 TTL 입력 버퍼를 선택할 있습니다. 포트 입력 모드 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H됩니다.

    

포트 출력 모드 레지스터 (POMxx) 포트 모드 제어 레지스터 (PMCxx)

포트 출력 모드 레지스터 (POMxx) 출력 모드를 1 비트 단위로 설정하는 레지스터입니다. 다른 전위의 외부 장치와 시리얼 통신시와 같은 전위의 외부 장치와 간이 I2C 통신시 단자에 N-ch

오픈드레인 출력 (VDD 내압) 모드를 선택할 있습니다. 포트 출력 모드 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H됩니다.

포트 모드 제어 레지스터 (PMCxx) 디지털 입출력 / 아날로그 입력을 1 비트 단위로 설정하는 레지스터입니다. 포트 모드 제어 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로

설정합니다.리셋 신호를 발생하여, FFH됩니다.

 

    

RL78/G14 탑재하고있다 PMxx, Pxx, PUxx, PIMxx, POMxx, PMCxx 레지스터와 비트 (1 / 5)

   

ビット

  

64 pin

52 pin

48 pin

44 pin

40 pin

36 pin

32 pin

30 pin

  

PMxx

Pxx

PUxx

PIMxx

POMxx

PMCxx

0

0

PM00

P00

PU00

POM00

PMC001

1

PM01

P01

PU01

PIM01

PMC011

2

PM02

P02

PU02

POM02

PMC02

3

PM03

P03

PU03

PIM03

POM032

PMC03

4

PM04

P04

PU04

PIM04

POM04

5

PM05

P05

PU05

6

PM06

P06

PU06

7

1

0

PM10

P10

PU10

PIM10

POM10

1

PM11

P11

PU11

POM11

2

PM12

P12

PU12

3

PM13

P13

PU13

PIM13

POM13

4

PM14

P14

PU14

PIM14

POM14

5

PM15

P15

PU15

PIM15

POM15

6

PM16

P16

PU16

PIM16

7

PM17

P17

PU17

PIM17

POM17

2

0

PM20

P20

1

PM21

P21

2

PM22

P22

3

PM23

P23

4

PM24

P24

5

PM25

P25

6

PM26

P26

7

PM27

P27

3

0

PM30

P30

PU30

PIM30

POM30

1

PM31

P31

PU31

PIM31

2

3

4

5

6

7

4

0

PM40

P40

PU40

1

PM41

P41

PU41

2

PM42

P42

PU42

3

PM43

P43

PU43

4

5

6

7

1. 30 , 32 제품 2. 64 제품

 

RL78/G14 탑재하고있다 PMxx, Pxx, PUxx, PIMxx , POMxx, PMCxx 레지스터와 비트 (2 / 5)

   

ビット

  

64

52

48

44

40

36

32

30

  

PMxx

Pxx

PUxx

PIMxx

POMxx

PMCxx

pin

pin

pin

pin

pin

pin

pin

pin

5

0

PM50

P50

PU50

PIM50

POM50

 

1

PM51

P51

PU51

POM51

 

2

PM52

P52

PU52

 

3

PM53

P53

PU53

 

4

PM54

P54

PU54

 

5

PM55

P55

PU55

PIM55

POM55

 

6

 

7

6

0

PM60

P60

 

 

1

PM61

P61

 

 

2

PM62

P62

 

 

3

PM63

P63

 

 

4

 

5

 

6

 

7

7

0

PM70

P70

PU70

 

1

PM71

P71

PU71

POM71

 

2

PM72

P72

PU72

 

3

PM73

P73

PU73

 

4

PM74

P74

PU74

POM74

 

5

PM75

P75

PU75

 

6

PM76

P76

PU76

 

7

PM77

P77

PU77

12

0

PM120

P120

PU120

PMC120

 

1

P121

 

 

2

P122

 

 

3

P123

 

 

4

P124

 

 

5

 

6

 

7

13

0

P130

 

                
                
 

1

 

2

 

3

 

4

 

5

 

6

 

7

P137

 

14

0

PM140

P140

PU140

 

1

PM141

P141

PU141

 

2

 

3

 

4

 

5

 

6

PM146

P146

PU146

 

7

PM147

P147

PU147

PMC147

 

 

 

RL78/G14 탑재하고있다 PMxx, Pxx, PUxx, PIMxx, POMxx, PMCxx 레지스터와 비트 (3 / 5)

 

   

ビット

  

100 pin

80 pin

  

PMxx

Pxx

PUxx

PIMxx

POMxx

PMCxx

0

0

PM00

P00

PU00

POM00

1

PM01

P01

PU01

PIM01

2

PM02

P02

PU02

POM02

PMC02

3

PM03

P03

PU03

PIM03

POM03

PMC03

4

PM04

P04

PU04

PIM04

POM04

5

PM05

P05

PU05

6

PM06

P06

PU06

7

1

0

PM10

P10

PU10

PIM10

POM10

1

PM11

P11

PU11

POM11

2

PM12

P12

PU12

PMC12

3

PM13

P13

PU13

PIM13

POM13

PMC13

4

PM14

P14

PU14

PIM14

POM14

5

PM15

P15

PU15

PIM15

POM15

6

PM16

P16

PU16

PIM16

PMC16

7

PM17

P17

PU17

PIM17

POM17

PMC17

2

0

PM20

P20

 

 

1

PM21

P21

 

 

2

PM22

P22

 

 

3

PM23

P23

 

 

4

PM24

P24

 

 

5

PM25

P25

 

 

6

PM26

P26

 

 

7

PM27

P27

 

 

3

0

PM30

P30

PU30

PIM30

POM30

1

PM31

P31

PU31

PIM31

2

3

4

5

6

7

4

0

PM40

P40

PU40

1

PM41

P41

PU41

2

PM42

P42

PU42

3

PM43

P43

PU43

PIM43

POM43

4

PM44

P44

PU44

PIM44

POM44

5

PM45

P45

PU45

POM45

6

PM46

P46

PU46

7

PM47

P47

PU47

 

 

RL78/G14 탑재하고있다 PMxx, Pxx, PUxx, PIMxx, POMxx, PMCxx 레지스터와 비트 (4 / 5)

   

ビット

  

100 pin

80 pin

  

PMxx

Pxx

PUxx

PIMxx

POMxx

PMCxx

5

0

PM50

P50

PU50

PIM50

POM50

1

PM51

P51

PU51

POM51

2

PM52

P52

PU52

POM52

3

PM53

P53

PU53

PIM53

POM53

4

PM54

P54

PU54

PIM54

POM54

5

PM55

P55

PU55

PIM55

POM55

6

PM56

P56

PU56

7

PM57

P57

PU57

6

0

PM60

P60

 

 

1

PM61

P61

 

 

2

PM62

P62

 

 

3

PM63

P63

 

 

4

PM64

P64

PU64

5

PM65

P65

PU65

6

PM66

P66

PU66

7

PM67

P67

PU67

7

0

PM70

P70

PU70

1

PM71

P71

PU71

POM71

2

PM72

P72

PU72

3

PM73

P73

PU73

4

PM74

P74

PU74

POM74

5

PM75

P75

PU75

6

PM76

P76

PU76

7

PM77

P77

PU77

8

0

PM80

P80

PU80

PIM80

POM80

1

PM81

P81

PU81

PIM81

POM81

2

PM82

P82

PU82

POM82

3

PM83

P83

PU83

4

PM84

P84

PU84

5

PM85

P85

PU85

6

PM86

P86

PU86

7

PM87

P87

PU87

10

0

PM100

P100

PU100

PMC100

1

PM101

P101

PU101

2

PM102

P102

PU102

3

4

5

6

7

 

 

RL78/G14 탑재하고있다 PMxx, Pxx, PUxx, PIMxx, POMxx, PMCxx 레지스터와 비트 (5 / 5)

 

   

ビット

  

100 pin

80 pin

  

PMxx

Pxx

PUxx

PIMxx

POMxx

PMCxx

11

0

PM110

P110

PU110

1

PM111

P111

PU111

2

3

4

5

6

7

12

0

PM120

P120

PU120

PMC120

1

P121

2

P122

 

 

3

P123

 

 

4

P124

 

 

5

6

7

13

0

P130

 

 

1

2

3

4

5

6

7

P137

 

 

14

0

PM140

P140

PU140

1

PM141

P141

PU141

2

PM142

P142

PU142

PIM142

POM142

3

PM143

P143

PU143

PIM143

POM143

4

PM144

P144

PU144

POM144

5

PM145

P145

PU145

6

PM146

P146

PU146

7

PM147

P147

PU147

PMC147

15

0

PM150

P150

 

 

1

PM151

P151

 

 

2

PM152

P152

 

 

3

PM153

P153

 

 

4

PM154

P154

 

 

5

PM155

P155

 

 

6

PM156

P156

 

 

7

 

포트 샘플 프로그램

예제 4-1P12 (포트 1 비트 2 ) 연결된 SW ON (로우 레벨 입력) P16 (포트 1 비트 6) 연결된 LED 점등 (로우 레벨 출력)하는 프로그램을 작성하십시오. 또한 P12 내장 풀업 저항을 사용한다.

 

1: #pragma sfr // Enable Peripheral I/O Register Name

2:

3: void main(void)

4: {

5: // P1 = 0x40; // P16 is High, Others is Low Level Latch

6: // PM1 = 0xBF; // P16 is Output, Others is Input

7: P1.6 = 1; // P16 is High Level Latch

8: PM1.6 = 0; // P16 is Output

9: PU1.2 = 1; // P12 Uses On-Chip Pull-Up Resistor

10: while( 1 ) {

11: P1.6 = P1.2; // P12(SW) to P16(LED)

12: // if( P1.2 == 0 ) // P12(SW) is ON(Low Level)

13: // P1.6 = 0; // P16(LED) is ON(Low Level)

14: // else

15: // P1.6 = 1; // P16(LED) is OFF(High Level)

16: }

17: }

해설 1 : 주변 I / O 레지스터 이름을 사용하기 위해 # pragma sfr 지령을 선언 있습니다.

 

5 ~ 8 호선 : P16 단자를 출력 포트 (초기 출력 하이 레벨), P12 단자를 입력 포트로 사용하기 위해 P1 0x40, PM1 0xBF 설정합니다. 또한 초기 상태 P1 모든 래치 0x00 로우 레벨 PM1 모든 단자 입력 포트 0xFF이므로 P1 비트 6 "1" 상부를 래치하고 PM1 비트 6 "0" 설정하고 높은 수준의 출력 포트에 초기화해도 상관 없습니다.

 

9 호선 : P92 내장 풀업 저항을 이용하기 위해 PU1 비트 6 "1" 설정하고 내부 풀업 저항을 사용합니다.

 

11 : P12 SW 값을 입력하고 P16 LED 출력합니다. 제어 SW LED 모두 1 비트이므로 , P1 해당하는 비트를 1 비트끼리 할당합니다.

 

12 ~ 15 : SW LED 제어는 P12 연결 SW 상태를 if 문으로 검사하고 결과에 따라 P16 연결 LED 점등 / 소등해도 상관 없습니다.

       

4.3  인터벌 타이머  인터벌 타이머 구성 인터벌 구성되어

 

인터벌 타이머구성타이머는다음과 같은 하드웨어로  있습니다. 카운터 : 12 비트 카운터 제어 레지스터 : 주변 활성화 레지스터 0 (PER0) 동작 속도 모드 제어 레지스터 (OSMC) 인터벌 타이머 제어 레지스터 (ITMC) 카운터 제어 레지스터에 따라 미리 설정 임의의 시간 간격으로 인터럽트 (INTIT) 발생합니다.

 

 

주변 활성화 레지스터 0,1 (PER0, PER1)

주변 활성화 레지스터 0,1 (PER0, PER1)

주변 활성화 레지스터 0,1 (PER0, PER1) 주변 하드웨어에 대한 클록 공급 허가 / 금지를 설정 레지스터입니다. 사용하지 않는 하드웨어에 클럭 공급을 중지시키는 것으로 저소비 전력화와 노이즈 저감을 도모합니다.

인터벌 타이머를 사용할 때는 반드시 PER0 비트 7 (RTCEN) "1" 설정하십시오. PER0, PER1 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H됩니다.

 

동작 속도 모드 제어 레지스터 (OSMC)

동작 속도 모드 제어 레지스터 (OSMC) WUTMMCK0 비트 인터벌 타이머의 동작 클럭을 선택할 있습니다. OSMC 레지스터는 8 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여, 00H됩니다.

 

 

 

인터벌 타이머 제어 레지스터 (ITMC)

인터벌 타이머 제어 레지스터 (ITMC) 인터벌 타이머의 작동 중지 / 시작 설정과 비교 값을 설정하는 레지스터입니다. ITMC 레지스터는 16 비트 메모리 조작 명령으로 설정합니다. 리셋 신호를 발생하여,

0FFFH됩니다.주의사항

• RINTE 비트를 1 → 0으로 변경하려면 INTIT 인터럽트 마스크 플래그 레지스터 인터럽트 처리 금지하고 에서 작성. 또한 갱신 ITIF 플래그를 클리어하고 인터럽트 처리 허가합니다. • RINTE 비트 리드 값은 RINTE 비트 설정 카운트 클럭 클럭 후에 반영됩니다. • ITCMP11-ITCMP0 비트 설정을 변경하려면 반드시 RINTE = 0 때해야합니다. 그러나 RINTE = 0 →

1 또는 1 → 0으로 변경 함과 동시에 ITCMP11-ITCMP0 비트 설정을 변경할 있습니다.

     

 

인터벌 타이머 동작

인터벌 타이머 동작

ITCMP11-ITCMP0 비트에 설정 카운트 값을 간격으로 반복 인터럽트 요청 (INTIT)

발생하는인터벌 타이머로 작동합니다.

RINTE 비트를 1 설정하면 12 비트 카운터가 카운트를 시작합니다.

12 비트 카운터 값이 ITCMP11-ITCMP0 비트에 설정 값과 일치 , 12 비트 카운터를 0으로

클리어하여 계산을 계속하는 동시에 인터럽트 요청 신호 (INTIT) 발생합니다.

 

   

 

 

 

 

인터럽트 요구 플래그 레지스터 (IF1H)

인터럽트 요구 플래그 레지스터 (IF1H) 인터럽트 요구 플래그는 해당 인터럽트 요청 발생 또는 명령의 실행에 의해 세트 (1)되어 인터럽트 요청

접수시 리셋 신호 발생하거나 명령을 실행하여 클리어 (0)되는 플래그 입니다. 인터벌 타이머 INTIT 인터럽트 신호는 IF1H ITIF 플래그가 대응하고 있습니다. 인터럽트가 접수 경우, 먼저 인터럽트 요구 플래그가 자동으로 지워지지에서 인터럽트 루틴에

들어갑니다.

IF1L, IF1H 레지스터는 1 비트 메모리 조작 명령 또는 8 비트 메모리 조작 명령으로 설정합니다. 또한 IF1L 레지스터와 IF1H 레지스터를 맞춰 16 비트 레지스터, IF1 사용하는 경우, 16 비트 메모리 조작 명령으로 설정 합니다.

리셋 신호를 발생하여, 00H됩니다.

 

 

【주의 사항】

인터럽트 요구 플래그 레지스터의 플래그 조작에는 1 비트 메모리 조작 명령 (CLR1) 사용하십시오. C 언어에서의 기술의 경우 컴파일 어셈블러가 1 비트 메모리 조작 명령 (CLR1) 필요하기 때문에 "IF1H.2 = 0;" "ITIF = 0;"같은 비트 조작 명령을 사용하십시오.

또한 C 언어 에서 "IF1H & = 0xFB;"같이 8 비트 메모리 조작 명령으로 작성하면 컴파일하면 3

명령어어셈블러입니다. mov a, IF1H and a # 0FBH mov IF1H, a 경우 "mov a, IF1H"나중에 "mov IF1H, a"사이의 시간에 동일한 인터럽트 요청 플래그 레지스터

(IF1H) 다른 비트 요구 플래그가 (1) 되어도, "mov IF1H, a" 클리어 (0)됩니다. 따라서 C 언어 8 비트 메모리 조작 명령을 사용하는 경우는주의가 필요합니다.

 

인터벌 타이머 예제 프로그램

예제 4-2

인터벌 타이머를 사용하여 250ms 간격으로 P16 연결된 LED 점멸시키는 프로그램을 창조하십시오. 또한, 인터럽트는 사용하지 않고, 클럭은 15kHz 저속 온칩 오실레이터 클럭 (f IL)을사용한다.

 

1: #pragma sfr // Enable Peripheral I/O Register Name

2:

3: void main(void)

4: {

5: PM1.6 = 0; // P16 is Output

6:

7: OSMC |= 0x10; // Clock Uses fIL

8: RTCEN = 1; // Interval Timer Enable

9: ITMC = 0x8000 + 15000/4-1; // 250ms Count and Interval Timer Start

10: while( 1 ) { // Endless Loop

11: while( ! ITIF ) // Wait INTIT Interrupt Signal

12: ;

13: ITIF = 0; // Clear Interrupt Request Flag

14: P1.6 ^= 1; // Reverse P16(LED)

15: }

16: }

해설

1 : 주변 I / O 레지스터 이름을 사용하기 위해 # pragma sfr 지령을 선언합니다.

5 호선 : P16 출력 포트로 설정합니다.

7 호선 : OSMC WUTMMCK0 "1" 설정하고, 인터벌 타이머의 입력 클럭에 저속 온칩

오실레이터클럭 (f IL)사용합니다.

8 : PER0 RTCE "0" 설정하고, 인터벌 타이머 클럭을 공급합니다.

9 호선 : ITMC  fRINTE에는 ILITCMP11-ITCMP0에는카운트 클럭에서 250ms 얻은 값을 설정하고

"1" 설정하고, 인터벌 타이머를 시작합니다.

11 ~ 12 : IF1H ITIF (인터럽트 요구 플래그) "1"이되는 것을 알아, INTIT 신호가 발생할 때까지 기다립니다.

13 : IF1H ITIF 지우고 인터럽트 요청을 중지합니다.

14 : P16 1 사이에서 배타적 논리합을 , LED 반전시킵니다.

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

RL78 option byte  (0) 2014.08.28
RL78-Cubesuite+ 구조체와 공용체  (0) 2013.04.09
RL78 컴파일러 사용 10  (0) 2013.04.05
RL78 컴파일러 사용 9  (0) 2013.04.05
RL78 컴파일러 사용 8  (0) 2013.04.05
RL78 컴파일러 사용 7  (0) 2013.04.05
posted by 큰파도

댓글을 달아 주세요