Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

IchigoJam P (RP2040) ๅ†…่”ตใฎRTCใ‚’ไฝฟใฃใฆใฟใ‚‹

Posted at

IchigoJam P ใง็”จใ„ใ‚‰ใ‚Œใ‚‹ Raspbery Pi Pico (RP2040) ใซใฏใ€RTC (ใƒชใ‚ขใƒซใ‚ฟใ‚คใƒ ใ‚ฏใƒญใƒƒใ‚ฏ) ใŒๅ†…่”ตใ•ใ‚ŒใฆใŠใ‚Šใ€็พๅœจๆ™‚ๅˆปใฎๆƒ…ๅ ฑใ‚’ๆ‰ฑใ†ใ“ใจใŒใงใใ‚‹ใ€‚

ไปŠๅ›žใฏใ€ๅฎŸ้š›ใซใ“ใฎ RTC ใซใ‚ขใ‚ฏใ‚ปใ‚นใ—ใ€ๆ™‚ๅˆปใ‚’่ชญใฟๆ›ธใใ—ใฆใฟใŸใ€‚
ใใฎใŸใ‚ใ€Raspberry Pi Pico ใฎๅ•†ๅ“ใƒšใƒผใ‚ธใซๆŽฒ่ผ‰ใ•ใ‚Œใฆใ„ใ‚‹ RP2040 ใฎใƒ‡ใƒผใ‚ฟใ‚ทใƒผใƒˆใ‚’ๅ‚็…งใ—ใ€ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใ‚’่กŒใฃใŸใ€‚

ใ“ใฎ่จ˜ไบ‹ใซๆŽฒ่ผ‰ใ—ใฆใ„ใ‚‹ใƒžใ‚ทใƒณ่ชžใฎใ‚ขใ‚ปใƒณใƒ–ใƒชใ‚ณใƒผใƒ‰ใฏใ€ๆ”น้€ ็‰ˆ asm15 ใงใ‚ขใ‚ปใƒณใƒ–ใƒซใ™ใ‚‹ใ“ใจใ‚’ๆƒณๅฎšใ—ใฆใ„ใ‚‹ใ€‚

โ€ปIchigoJamใฏjig.jpใฎ็™ป้Œฒๅ•†ๆจ™ใงใ™ใ€‚

RTC ใฎๆ“ไฝœใ‚’ๆ”ฏใˆใ‚‹ๆŠ€่ก“

RTC ใซไพ›็ตฆใ•ใ‚Œใ‚‹ใ‚ฏใƒญใƒƒใ‚ฏใฎ็ขบ่ช

RP2040 ใฎ RTC ใŒๆ™‚ๅˆปใ‚’้€ฒใ‚ใ‚‹ๅŸบๆบ–ใจใชใ‚‹ใ‚ฏใƒญใƒƒใ‚ฏใฏใ€clk_rtc ใงใ‚ใ‚‹ใ€‚
ใƒ‡ใƒผใ‚ฟใ‚ทใƒผใƒˆใฎ 2.15. Clocks ใ‚’ใ‚‚ใจใซใ€ใ“ใฎใ‚ฏใƒญใƒƒใ‚ฏใŒ IchigoJam P ใซใŠใ„ใฆใฉใฎใ‚ˆใ†ใช่จญๅฎšใซใชใฃใฆใ„ใ‚‹ใ‹ใ‚’็ขบ่ชใ—ใŸใ€‚

clk_rtc ใฎ่จญๅฎšใ‚’่ชญใฟๅ–ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ 
10 ' IchigoJam P clk_rtc
20 POKE#700,#03,#4B,#3F,#A2
30 POKE#704,#18,#68,#10,#60
40 POKE#708,#58,#68,#50,#60
50 POKE#70C,#70,#47,#00,#00
60 POKE#710,#6C,#80,#00,#40
70 X=USR(#700,0)
80 ?"CLK_RTC_CTRL = #";
90 ?HEX$([1],4);HEX$([0],4)
100 ?"CLK_RTC_DIV  = #";
110 ?HEX$([3],4);HEX$([2],4)
clk_rtc ใฎ่จญๅฎšใ‚’่ชญใฟๅ–ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ  (ใƒžใ‚ทใƒณ่ชž้ƒจๅˆ†)
ORG #700
	R3 = [@CLK_RTC_ADDRESS]L
	R2 = @ARRAY_ADDRESS
	R0 = [R3]L
	[R2]L = R0
	R0 = [R3 + 1]L
	[R2 + 1]L = R0
	RET

ALIGN 4,0,0
@CLK_RTC_ADDRESS
	UDATAL #4000806C

ORG #800
@ARRAY_ADDRESS

ๅฎŸ่กŒ็ตๆžœใฏใ€ไปฅไธ‹ใฎใ‚ˆใ†ใซใชใฃใŸใ€‚

ๅฎŸ่กŒ็ตๆžœ

CLK_RTC_CTRL = #00000800
CLK_RTC_DIV  = #00040000

ใจใชใฃใฆใ„ใ‚‹ใ“ใจใ‹ใ‚‰ใ€ไปฅไธ‹ใฎใ“ใจใŒใ‚ใ‹ใ‚‹ใ€‚

  • clk_rtc ใซใฏใ€ใ‚ฏใƒญใƒƒใ‚ฏใฎไพ›็ตฆใŒ่กŒใ‚ใ‚Œใฆใ„ใ‚‹ (ENABLE = 1)
  • clk_rtc ใซไพ›็ตฆใ•ใ‚Œใ‚‹ใ‚ฏใƒญใƒƒใ‚ฏใฏใ€PLL_USB ใฎๅ‡บๅŠ›ใŒใ‚‚ใจใซใชใฃใฆใ„ใ‚‹ (AUXSRC = 0)
  • clk_rtc ใซไพ›็ตฆใ•ใ‚Œใ‚‹ใ‚ฏใƒญใƒƒใ‚ฏใฎๅ‘จๆณขๆ•ฐใฏใ€ใ‚‚ใจใฎใ‚ฏใƒญใƒƒใ‚ฏใฎ 1 / 1024 ใงใ‚ใ‚‹

ใ‚ˆใฃใฆใ€PLL_USB ใฎๅ‡บๅŠ›ใŒ 48 MHz ใงใ‚ใ‚‹ใจไปฎๅฎšใ™ใ‚‹ใจใ€clk_rtc ใซใฏใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใง 46,875 Hz ใฎใ‚ฏใƒญใƒƒใ‚ฏใŒไพ›็ตฆใ•ใ‚Œใฆใ„ใ‚‹ใ“ใจใŒใ‚ใ‹ใ‚‹ใ€‚
ไปŠๅ›žใฏใ€ใ“ใ‚Œใ‚’ไปฎๅฎšใ—ใŸๅฎŸ่ฃ…ใ‚’่กŒใ†ใ€‚

400ใฎๅ€ๆ•ฐใงใชใ„100ใฎๅ€ๆ•ฐใฎๅนดใฎๅˆคๅฎš

RP2040 ใฎ RTC ใฏใ€0๏ฝž4095 ๅนดใ‚’ๆ‰ฑใ†ใ“ใจใŒใงใใ‚‹ใ€‚
ใ†ใ‚‹ใ†ๅนดใฎๅ‡ฆ็†ใซใŠใ„ใฆใ€4ใฎๅ€ๆ•ฐใฎๅนดใ‹ใฎๅˆคๅฎšใฏใƒใƒผใƒ‰ใ‚ฆใ‚งใ‚ขใง่กŒใฃใฆใใ‚Œใ‚‹ใŒใ€100ใฎๅ€ๆ•ฐใฎๅนดใ‹ใฎๅˆคๅฎšใฏ่กŒใ‚ใšใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏ4ใฎๅ€ๆ•ฐใฎๅนดใฏๅฟ…ใšใ†ใ‚‹ใ†ๅนดใจใ—ใฆๅ‡ฆ็†ใ•ใ‚Œใ‚‹ใ€‚
ใ“ใ‚Œใ‚’้˜ฒใใซใฏใ€ใ‚ฝใƒ•ใƒˆใ‚ฆใ‚งใ‚ขใงๅˆคๅฎšใ‚’่กŒใ„ใ€ใƒฌใ‚ธใ‚นใ‚ฟใฎๅฏพ็ญ–็”จใƒ•ใƒฉใ‚ฐใ‚’่จญๅฎšใ—ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚

ใจใ“ใ‚ใŒใ€RP2040 ใซใฏๅ‰ฒใ‚Š็ฎ—ใ‚’่กŒใ†ๅ‘ฝไปคใŒ็„กใใ€100ใฎๅ€ๆ•ฐใฎๅนดใ‹ใฎๅˆคๅฎšใซใฏๅทฅๅคซใŒๆฑ‚ใ‚ใ‚‰ใ‚Œใ‚‹ใ€‚
ใใ“ใงใ€AI ใซใ‚„ใ‚Šๆ–นใ‚’่žใ„ใฆใฟใŸใ€‚

ๅ‰ฒใ‚Š็ฎ—ๅ‘ฝไปคใ‚’ไฝฟใ‚ใšใซใ€ๅŠน็އใ‚ˆใ16ใƒ“ใƒƒใƒˆใฎ็ฌฆๅทใชใ—ๆ•ดๆ•ฐใ‚’400ใงๅ‰ฒใฃใŸไฝ™ใ‚Šใ‚’ๆฑ‚ใ‚ใ‚‹ใซใฏ๏ผŸ

ใ™ใ‚‹ใจใ€6554 ใ‚’ๆŽ›ใ‘ใฆ 16 ใƒ“ใƒƒใƒˆๅณใ‚ทใƒ•ใƒˆใ™ใ‚‹ใ“ใจใง 400 ใฎ้€†ๆ•ฐใ‚’ๆŽ›ใ‘ใŸ็ตๆžœใฎ่ฟ‘ไผผใ‚’ๆฑ‚ใ‚ใ‚‹ใจใ„ใ†ๆ–นๆณ•ใŒ็คบใ•ใ‚ŒใŸใ€‚
ๆฎ‹ๅฟตใชใŒใ‚‰ใ“ใฎๆ–นๆณ•ใฏ้–“้•ใฃใฆใŠใ‚Šใ€400 ใงใฏใชใ 10 ใงๅ‰ฒใฃใŸๅ€คใŒๅพ—ใ‚‰ใ‚ŒใŸใ€‚
ใ—ใ‹ใ—ใ€ใ€ŒๆŽ›ใ‘็ฎ—ใจใƒ“ใƒƒใƒˆใ‚ทใƒ•ใƒˆใงๅ‰ฒใ‚Š็ฎ—ใ‚’่ฟ‘ไผผใ™ใ‚‹ใ€ใจใ„ใ†ใ‚ขใ‚คใƒ‡ใ‚ข่‡ชไฝ“ใฏๆœ‰ๅŠนใใ†ใงใ‚ใ‚‹ใ€‚
ใใ“ใงใ€ใ„ใใคใ‹ใฎใƒ“ใƒƒใƒˆใ‚ทใƒ•ใƒˆๅน…ใซใคใ„ใฆใ€ๆŽ›ใ‘ใ‚‹ในใๅ€คใ‚’ๆฑ‚ใ‚ใŸใ€‚
ๆŽ›ใ‘ใ‚‹ในใๅ€คใฏใ€(1 << ใ‚ทใƒ•ใƒˆๅน…) / 400 ใงๆฑ‚ใ‚ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚
ใชใŠใ€็ถšใๅ‡ฆ็†ใฎ้ƒฝๅˆใงใ€ๆฑ‚ใ‚ใ‚‹่ฟ‘ไผผๅ€คใฏ็œŸใฎๅ€คใ‚ˆใ‚Šๅฐ‘ใ—ๅฐใ•ใ„ใฎใŒใ‚ˆใ„ใ€‚

ใ‚ทใƒ•ใƒˆๅน… ๆŽ›ใ‘ใ‚‹ในใๅ€ค
16 163.84
15 81.92
14 40.96
13 20.48
12 10.24
11 5.12
10 2.56
9 1.28

ๆŽ›ใ‘ใ‚‹ๅ€คใ‚’ใ“ใฎใ€ŒๆŽ›ใ‘ใ‚‹ในใๅ€คใ€ใ‹ใ‚‰ๅฐๆ•ฐ็‚นไปฅไธ‹ใ‚’ๅˆ‡ใ‚ŠๆจใฆใŸ (ใ™ใชใ‚ใกใ€ๅฐ‘ใ—ๅฐใ•ใใ—ใŸ) ๅ€คใซใ™ใ‚‹ใ“ใจใงใ€็œŸใฎๅ€คใ‚ˆใ‚Šๅฐ‘ใ—ๅฐใ•ใ„่ฟ‘ไผผๅ€คใ‚’ๅพ—ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚
ใ“ใฎไธญใงใฏใ€ใ‚ทใƒ•ใƒˆๅน… 11 ใฎใจใๅˆ‡ใ‚Šๆจใฆใ‚‹้‡ใŒ 0.12 ใจๅฐใ•ใ„ใฎใงใ€่ชคๅทฎใŒๅฐใ•ใใชใ‚‹ใ“ใจใŒๆœŸๅพ…ใงใใ‚‹ใจใ—ใฆๆŽก็”จใ—ใŸใ€‚

ๅนดใฎๅ€คใ‚’ 400 ใงๅ‰ฒใฃใŸๅ•†ใŒๆฑ‚ใพใฃใŸใ‚‰ใ€ใใ‚Œใซ 400 ใ‚’ๆŽ›ใ‘ใฆๅนดใฎๅ€คใ‹ใ‚‰ๅผ•ใใ“ใจใงใ€ๅนดใฎๅ€คใ‚’ 400 ใงๅ‰ฒใฃใŸไฝ™ใ‚Šใ‚’ๆฑ‚ใ‚ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚
ไปŠๅ›žใฏๅ•†ใฎ่ฟ‘ไผผๅ€คใ‚’็”จใ„ใฆใŠใ‚Šใ€ใ“ใ‚Œใฏๆญฃใ—ใ„ๅ•†ใ‚ˆใ‚Šๅฐใ•ใ„ใ“ใจใŒใ‚ใ‚‹ใŸใ‚ใ€ๆฑ‚ใพใ‚‹ใ€Œไฝ™ใ‚Šใ€ใฏ 400 ไปฅไธŠใซใชใ‚‹ใ“ใจใŒใ‚ใ‚‹ใ€‚
ใ€Œไฝ™ใ‚Šใ€ใŒ 400 ไปฅไธŠใซใชใฃใŸ้š›ใฏ 400 ใ‚’ๅผ•ใใ“ใจใงๆญฃใ—ใ„ไฝ™ใ‚Šใ‚’ๆฑ‚ใ‚ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚
ใจใ“ใ‚ใงใ€ไปŠๅ›žใฏไฝ™ใ‚Šใ‚’ๆฑ‚ใ‚ใŸใ„ใฎใงใฏใชใใ€ไฝ™ใ‚ŠใŒ 100 ใฎๅ€ๆ•ฐใซใชใ‚‹ใ‹ใ ใ‘ใ‚ใ‹ใ‚Œใฐใ‚ˆใ„ใ€‚
ใใฎใŸใ‚ใ€ใ“ใฎๅˆคๅฎšใซๅฝฑ้Ÿฟใ‚’ไธŽใˆใชใ‘ใ‚Œใฐใ€400 ใ‚’ๅผ•ใๅ‡ฆ็†ใ‚’็œ็•ฅใงใใ‚‹ใ€‚
ๅฎŸ้š›ใซใ€ไปฅไธ‹ใฎใ‚ณใƒผใƒ‰ใง่ฉฆใ—ใฆใฟใŸใ€‚

#include <stdio.h>

int main(void) {
	int i;
	int wa_cnt = 0;
	for (i = 0; i < 4096; i++) {
		int q = (i * 5) >> 11;
		int r = i - 400 * q;
		int expected = i % 100 == 0 && i % 400 != 0;
		int actual = r == 100 || r == 200 || r == 300;
		int ac = expected == actual;
		printf("%4d %4d %d %d %d\n", i, r, expected, actual, ac);
		wa_cnt += !ac;
	}
	printf("wa_cnt = %d\n", wa_cnt);
	return 0;
}

ๅฎŸ่กŒ็ตๆžœ ใ‚’่ฆ‹ใ‚‹ใจใ€wa_cnt = 0 ใŒ 0 ใจใชใฃใฆใŠใ‚Šใ€ๅ…จใฆใฎๅ…ฅๅŠ›ใซใŠใ„ใฆๆญฃใ—ใ„ๅˆคๅฎšใŒใงใใŸใ“ใจใŒใ‚ใ‹ใ‚‹ใ€‚
ใ™ใชใ‚ใกใ€ๅ…ฅๅŠ›ใŒ 0๏ฝž4095 ใฎ็ฏ„ๅ›ฒใฎใจใใ€400 ใงๅ‰ฒใฃใŸใจใใฎๅ•†ใ‚’ใ€Œ5 ใ‚’ๆŽ›ใ‘ใฆ 11 ใƒ“ใƒƒใƒˆๅณใ‚ทใƒ•ใƒˆใ™ใ‚‹ใ€ๅ‡ฆ็†ใง่ฟ‘ไผผใ—ใ€ใ“ใฎๅ•†ใ‚’็”จใ„ใฆใ€Œไฝ™ใ‚Šใ€ใ‚’ๆฑ‚ใ‚ใŸ็ตๆžœใŒ 100, 200, 300 ใฎใ„ใšใ‚Œใ‹ใงใ‚ใ‚‹ใ‹ใ‚’ๅˆคๅฎšใ™ใ‚‹ใ“ใจใงใ€ใ€Œๅ…ฅๅŠ›ใŒ 100 ใฎๅ€ๆ•ฐใงใ‚ใ‚Šใ€ใ‹ใค 400 ใฎๅ€ๆ•ฐใงใฏใชใ„ใ€ใ‹ใฉใ†ใ‹ใจๅŒใ˜ๅˆคๅฎš็ตๆžœใ‚’ๅพ—ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚
ใ‚ˆใฃใฆใ€ใ“ใฎๅˆคๅฎšๆ–นๆณ•ใงใ€Œ4 ใฎๅ€ๆ•ฐใงใ‚ใฃใฆใ‚‚ใ†ใ‚‹ใ†ๅนดใงใชใ„ๅนดใ‹ใฉใ†ใ‹ใ€ใ‚’ๅˆคๅฎšใ™ใ‚‹ใ“ใจใŒใงใใ‚‹ใ€‚

ใƒ“ใƒƒใƒˆใ‚ทใƒ•ใƒˆใ‚’็”จใ„ใŸใƒ“ใƒƒใƒˆใƒžใ‚นใ‚ฏๅ‡ฆ็†

่ค‡ๆ•ฐใฎๆƒ…ๅ ฑใŒๆ ผ็ดใ•ใ‚ŒใŸใƒฏใƒผใƒ‰ใ‹ใ‚‰ๆฌฒใ—ใ„ๆƒ…ๅ ฑใ‚’ๅ–ใ‚Šๅ‡บใ™ใซใฏใ€ใƒ“ใƒƒใƒˆใƒžใ‚นใ‚ฏใจใฎ AND ๆผ”็ฎ—ใ‚’่กŒใ†ๆ–นๆณ•ใŒใ‚ˆใ็”จใ„ใ‚‰ใ‚Œใ‚‹ใ€‚
ใ—ใ‹ใ—ใ€ใ“ใฎๆ–นๆณ•ใงใฏใ€ใพใšใƒ“ใƒƒใƒˆใƒžใ‚นใ‚ฏใฎๅ€คใ‚’็”จๆ„ใ™ใ‚‹ๅฟ…่ฆใŒใ‚ใ‚Šใ€้ขๅ€’ใงใ‚ใ‚‹ใ€‚
ใŸใจใˆใฐใ€ใƒฌใ‚ธใ‚นใ‚ฟ R0 ใฎไธ‹ใ‹ใ‚‰ 4 ใƒ“ใƒƒใƒˆ็›ฎใ‹ใ‚‰ 7 ใƒ“ใƒƒใƒˆ็›ฎใ‚’ๅ–ใ‚Šๅ‡บใ™ๅ ดๅˆใ€็ด ็›ดใซๅฎŸ่ฃ…ใ™ใ‚‹ใจ

ใƒ“ใƒƒใƒˆใƒžใ‚นใ‚ฏใซใ‚ˆใ‚Šๆƒ…ๅ ฑใ‚’ๅ–ใ‚Šๅ‡บใ™ไพ‹
R1 = R0 >> 4
R2 = #F
R1 &= R2

ใฎใ‚ˆใ†ใซใ€3 ๅ‘ฝไปคใ‚’ไฝฟใ†ใ“ใจใซใชใ‚‹ใ€‚

ใ—ใ‹ใ—ใ€ไปฅไธ‹ใฎใ‚ˆใ†ใซใ™ใ‚‹ใ“ใจใงใ€ใƒ“ใƒƒใƒˆใ‚ทใƒ•ใƒˆใ‚’็”จใ„ใฆๆฌฒใ—ใ„ๆƒ…ๅ ฑใ‚’ๅ–ใ‚Šๅ‡บใ™ใ“ใจใŒใงใใ‚‹ใ€‚

  1. ๅทฆใ‚ทใƒ•ใƒˆใ‚’่กŒใ„ใ€ๆฌฒใ—ใ„ๆƒ…ๅ ฑใ‚ˆใ‚ŠไธŠไฝใฎไฝ™่จˆใชใƒ“ใƒƒใƒˆใ‚’็ฏ„ๅ›ฒๅค–ใซๆŠผใ—ๅ‡บใ™
  2. ่ซ–็†ๅณใ‚ทใƒ•ใƒˆใ‚’่กŒใ„ใ€ๆฌฒใ—ใ„ๆƒ…ๅ ฑใ‚ˆใ‚Šไธ‹ไฝใฎไฝ™่จˆใชใƒ“ใƒƒใƒˆใ‚’็ฏ„ๅ›ฒๅค–ใซๆŠผใ—ๅ‡บใ™

่ซ–็†ๅณใ‚ทใƒ•ใƒˆใฎๅน…ใฏใ€ใ€Œ่กŒใฃใŸๅทฆใ‚ทใƒ•ใƒˆใฎๅน… ๏ผ‹ ๆœ€ๅˆใฎ็Šถๆ…‹ใงใฎๆฌฒใ—ใ„ๆƒ…ๅ ฑใ‚ˆใ‚Šไธ‹ไฝใฎไฝ™่จˆใชใƒ“ใƒƒใƒˆใฎๆ•ฐใ€ใงใ‚ใ‚‹ใ€‚
ใ“ใฎๆ–นๆณ•ใ‚’็”จใ„ใ‚‹ใจใ€

ใƒ“ใƒƒใƒˆใ‚ทใƒ•ใƒˆใซใ‚ˆใ‚Šๆƒ…ๅ ฑใ‚’ๅ–ใ‚Šๅ‡บใ™ไพ‹
R1 = R0 << 24
R1 = R1 >> 28

ใฎใ‚ˆใ†ใซใ€2 ๅ‘ฝไปคใงๆฌฒใ—ใ„ๆƒ…ๅ ฑใ ใ‘ใ‚’ๅ–ใ‚Šๅ‡บใ™ใ“ใจใŒใงใใ€ใ‚ˆใ‚Š็Ÿญใ„ใ‚ณใƒผใƒ‰ใงๅฎŸ็พใงใใ‚‹ใ€‚

ๆ›ธใ่พผใฟใซใ‚ˆใ‚‹ใƒ“ใƒƒใƒˆใ‚ปใƒƒใƒˆใƒปใƒ“ใƒƒใƒˆใ‚ฏใƒชใ‚ข

RP2040 ใฎๅ‘จ่พบๆฉŸๅ™จใ‚’ๅˆถๅพกใ™ใ‚‹ใƒฌใ‚ธใ‚นใ‚ฟใงใฏใ€ๆ™ฎ้€šใฎ่ชญใฟๆ›ธใใ‚ขใ‚ฏใ‚ปใ‚นใซๅŠ ใˆใ€

  • ๆœฌๆฅใฎใ‚ขใƒ‰ใƒฌใ‚นใซ 0x2000 ใ‚’่ถณใ—ใŸใ‚ขใƒ‰ใƒฌใ‚นใซๆ›ธใ่พผใ‚€ใ“ใจใงใ€ๆ›ธใ่พผใ‚“ใ ๅ€คใŒใ€Œ1ใ€ใฎใƒ“ใƒƒใƒˆใ‚’ใ€Œ1ใ€ใซใ—ใ€ใ€Œ0ใ€ใฎใƒ“ใƒƒใƒˆใฏๅค‰ใˆใชใ„ (ใƒ“ใƒƒใƒˆใ‚ปใƒƒใƒˆ)
  • ๆœฌๆฅใฎใ‚ขใƒ‰ใƒฌใ‚นใซ 0x3000 ใ‚’่ถณใ—ใŸใ‚ขใƒ‰ใƒฌใ‚นใซๆ›ธใ่พผใ‚€ใ“ใจใงใ€ๆ›ธใ่พผใ‚“ใ ๅ€คใŒใ€Œ1ใ€ใฎใƒ“ใƒƒใƒˆใ‚’ใ€Œ0ใ€ใซใ—ใ€ใ€Œ0ใ€ใฎใƒ“ใƒƒใƒˆใฏๅค‰ใˆใชใ„ (ใƒ“ใƒƒใƒˆใ‚ฏใƒชใ‚ข)

ใ“ใจใŒใงใใ‚‹ใ€‚
(ใƒ‡ใƒผใ‚ฟใ‚ทใƒผใƒˆ 2.1.2. Atomic Register Access)

ใ“ใฎๆฉŸ่ƒฝใ‚’็”จใ„ใ‚‹ใ“ใจใงใ€ใƒฌใ‚ธใ‚นใ‚ฟๅ†…ใฎไธ€้ƒจใฎใƒ“ใƒƒใƒˆใฎใฟใ‚’ๅค‰ๆ›ดใ—ใŸใ„้š›ใ€

  1. ใƒฌใ‚ธใ‚นใ‚ฟใฎๅ€คใ‚’่ชญใฟๅ‡บใ™
  2. ๅค‰ๆ›ดใ—ใŸใ„ใƒ“ใƒƒใƒˆใ‚’ๅค‰ๆ›ดใ™ใ‚‹
  3. ๅค‰ๆ›ดๅพŒใฎๅ€คใ‚’ๆ›ธใ่พผใ‚€

ใจใ„ใ†ๆ‰‹้ †ใ‚’่ธใพใšใ€ๅค‰ๆ›ดใ™ใ‚‹ใƒ“ใƒƒใƒˆใฎไฝ็ฝฎใ‚’่กจใ™ๅ€คใ‚’ๆ›ธใ่พผใ‚€ใ ใ‘ใงๅค‰ๆ›ดใงใใ‚‹ใฎใงใ€ๅŠน็އใ‚ˆใๅ‡ฆ็†ใ‚’่กŒใ†ใ“ใจใŒใงใใ‚‹ใ€‚

RTC ใฎๆ“ไฝœใง็”จใ„ใ‚‹ใƒ‡ใƒผใ‚ฟๅฝขๅผ

RTC ใฎใƒฌใ‚ธใ‚นใ‚ฟ (RP2040 ใฎไป•ๆง˜)

RP2040 ใฎ RTC ใงใฏใ€32ใƒ“ใƒƒใƒˆใฎใƒฌใ‚ธใ‚นใ‚ฟใ‚’2ๅ€‹็”จใ„ใฆๆ™‚ๅˆปใ‚’่กจ็พใ™ใ‚‹ใ€‚
2ๅ€‹ใฎใƒฌใ‚ธใ‚นใ‚ฟใซใ€ใใ‚Œใžใ‚Œใ€Œๆ—ฅไป˜ใƒ‡ใƒผใ‚ฟใ€ใŠใ‚ˆใณใ€Œๆ›œๆ—ฅใƒปๆ™‚ๅˆปใƒ‡ใƒผใ‚ฟใ€ใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚

ๆ—ฅไป˜ใƒ‡ใƒผใ‚ฟ

RP2040 ใฎๆ—ฅไป˜ใƒฌใ‚ธใ‚นใ‚ฟ

ใƒ‡ใƒผใ‚ฟๅ ๆœ€ไธ‹ไฝใƒ“ใƒƒใƒˆ ใƒ“ใƒƒใƒˆๆ•ฐ ๆ„ๅ‘ณ
YEAR 12 12 ๅนด (0๏ฝž4095)
MONTH 8 4 ๆœˆ (1๏ฝž12)
DAY 0 5 ๆ—ฅ (1๏ฝžๆœ€ๅคง31)

ๆ—ฅใฎๆœ‰ๅŠนใชๆœ€ๅคงๅ€คใฏใ€ๅนดใจๆœˆใซใ‚ˆใ‚‹ใ€‚

ๆ›œๆ—ฅใƒปๆ™‚ๅˆปใƒ‡ใƒผใ‚ฟ

RP2040 ใฎๆ›œๆ—ฅใƒปๆ™‚ๅˆปใƒฌใ‚ธใ‚นใ‚ฟ

ใƒ‡ใƒผใ‚ฟๅ ๆœ€ไธ‹ไฝใƒ“ใƒƒใƒˆ ใƒ“ใƒƒใƒˆๆ•ฐ ๆ„ๅ‘ณ
DOTW 24 3 ๆ›œๆ—ฅ (ๆ—ฅ๏ผš0ใ€ๆœˆ:1ใ€โ€ฆใ€ๅœŸ๏ผš6)
HOUR 16 5 ๆ™‚ (0๏ฝž23)
MIN 8 6 ๅˆ† (0๏ฝž59)
SEC 0 6 ็ง’ (0๏ฝž59)

้…ๅˆ—ใ‚’็”จใ„ใŸ่กจ็พ (ไปŠๅ›žใฎ็‹ฌ่‡ชไป•ๆง˜)

ไปŠๅ›žใฏใ€IchigoJam BASIC ใฎ้…ๅˆ—ใฎ่ฆ็ด ใ‚’ไปฅไธ‹ใฎใ‚ˆใ†ใซๆ—ฅๆ™‚ใฎ่ฆ็ด ใซๅ‰ฒใ‚Šๅฝ“ใฆใ‚‹ใ€‚
ๆ›œๆ—ฅใฏๆ‰ฑใ‚ใชใ„ใ€‚

ๆทปๅญ— ๆ—ฅๆ™‚ใฎ่ฆ็ด 
0 ๅนด
1 ๆœˆ
2 ๆ—ฅ
3 ๆ™‚
4 ๅˆ†
5 ็ง’

RTC ใฎ่ชญใฟๅ‡บใ—ๅ‡ฆ็†ใฏใ€ใ“ใ‚Œใ‚‰ใฎ่ฆ็ด ใซ็ตๆžœใ‚’ๆ ผ็ดใ™ใ‚‹ใ€‚
้€†ใซใ€RTC ใธใฎๆ›ธใ่พผใฟๅ‡ฆ็†ใฏใ€ใ“ใ‚Œใ‚‰ใฎ่ฆ็ด ใ‹ใ‚‰ๆ›ธใ่พผใ‚€ๆ—ฅๆ™‚ใ‚’ๅ–ๅพ—ใ™ใ‚‹ใ€‚

RTC ใฎๆ“ไฝœใ‚’่กŒใ†ๆ–นๆณ•

RP2040 ใฎ RTC ใฏใ€ไปฅไธ‹ใฎๆ‰‹้ †ใงๆ“ไฝœใ‚’่กŒใ†ใ“ใจใŒใงใใ‚‹ใ€‚

ใ“ใ“ใงใ€ใ€Œใ‚ชใƒ•ใ‚ปใƒƒใƒˆใ€ใจใฏใ€ๅ„ใƒฌใ‚ธใ‚นใ‚ฟใฎใ‚ขใƒ‰ใƒฌใ‚นใ‹ใ‚‰ 0x4005c000 (RTC ้–ขไฟ‚ใฎใƒฌใ‚ธใ‚นใ‚ฟใฎใƒ™ใƒผใ‚นใ‚ขใƒ‰ใƒฌใ‚น) ใ‚’ๅผ•ใ„ใŸๅ€คใ‚’็คบใ™ใ€‚
ใ™ใชใ‚ใกใ€ๅ„ใƒฌใ‚ธใ‚นใ‚ฟใฎใ‚ขใƒ‰ใƒฌใ‚นใฏใ€ใ€Œใ‚ชใƒ•ใ‚ปใƒƒใƒˆใ€ใซ 0x4005c000 ใ‚’่ถณใ—ใŸใ‚‚ใฎใงใ‚ใ‚‹ใ€‚

ใพใŸใ€ใƒ“ใƒƒใƒˆใฎไฝ็ฝฎใฏ LSB (ๆœ€ไธ‹ไฝใƒ“ใƒƒใƒˆ) ใ‚’ 0 ใจใ™ใ‚‹ใ€‚(0-origin)

RTC ใซๆ™‚ๅˆปใ‚’ๆ›ธใ่พผใ‚€

ไปฅไธ‹ใฎๆ‰‹้ †ใงใ€RTC ใŒ็ฎก็†ใ—ใฆใ„ใ‚‹ๆ™‚ๅˆปใ‚’่จญๅฎšใงใใ‚‹ใ€‚

  1. ๆ›ธใ่พผใ‚€ๆ™‚ๅˆปใ‚’่จญๅฎšใ™ใ‚‹
  2. ่จญๅฎšใ—ใŸๆ™‚ๅˆปใ‚’ๆ›ธใ่พผใ‚€ๆŒ‡็คบใ‚’ๅ‡บใ™

ๅ…ทไฝ“็š„ใซใฏใ€ไปฅไธ‹ใฎใ‚ˆใ†ใซ่กŒใ†ใ€‚

  1. SETUP_0 ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x04) ใซๆ—ฅไป˜ใƒ‡ใƒผใ‚ฟใ‚’ๆ›ธใ่พผใ‚€
  2. SETUP_1 ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x08) ใซๆ›œๆ—ฅใƒปๆ™‚ๅˆปใƒ‡ใƒผใ‚ฟใ‚’ๆ›ธใ่พผใ‚€
  3. CTRL ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x0c) ใฎ LOAD (ใƒ“ใƒƒใƒˆ 4) ใซ 1 ใ‚’ๆ›ธใ่พผใ‚€

RTC ใ‚’่ตทๅ‹•ใ™ใ‚‹

ใพใšใ€RTC ใซไพ›็ตฆใ—ใฆใ„ใ‚‹ใ‚ฏใƒญใƒƒใ‚ฏ clk_rtc ใฎๅ‘จๆณขๆ•ฐใฎๆƒ…ๅ ฑใ‚’่จญๅฎšใ™ใ‚‹ใ€‚
ๅ…ทไฝ“็š„ใซใฏใ€CLKDIV_M1 ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x00) ใซใ€Œๅ‘จๆณขๆ•ฐ [Hz] ๏ผ 1ใ€ใฎๅ€คใ‚’่จญๅฎšใ™ใ‚‹ใ€‚
ใ“ใฎใƒฌใ‚ธใ‚นใ‚ฟใฏใ€ไธ‹ไฝ 16 ใƒ“ใƒƒใƒˆใŒๆœ‰ๅŠนใงใ‚ใ‚‹ใ€‚

ไปŠๅ›žใฏ clk_rtc ใฎๅ‘จๆณขๆ•ฐใ‚’ 46,875 Hz ใจไปฎๅฎšใ—ใฆใ„ใ‚‹ใฎใงใ€46874 ใ‚’่จญๅฎšใ™ใ‚‹ใ€‚

ใ“ใ‚Œใฏใ€clk_rtc ใ‚’ๅˆ†ๅ‘จใ—ใฆ 1 Hz ใซใ™ใ‚‹ใŸใ‚ใฎๅˆ†ๅ‘จๆฏ”ใฎ่จญๅฎšใงใ‚ใ‚‹ใ€‚
ๆœฌๆฅใ‚ˆใ‚Šๅฐใ•ใ„ๅ€คใ‚’่จญๅฎšใ™ใ‚‹ใจใ€ๆ™‚ๅˆปใŒๆœฌๆฅใ‚ˆใ‚Š้€Ÿใ้€ฒใ‚€ใ‚ˆใ†ใซใชใ‚Šใ€ๅฎŸ้จ“ใชใฉใซๅฝน็ซ‹ใคๅฏ่ƒฝๆ€งใŒใ‚ใ‚‹ใ€‚

ๆฌกใซใ€RTC ใ‚’ๆœ‰ๅŠนใซใ™ใ‚‹ใ€‚
ๅ…ทไฝ“็š„ใซใฏใ€CTRL ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x0c) ใฎ RTC_ENABLE (ใƒ“ใƒƒใƒˆ 0) ใซ 1 ใ‚’ๆ›ธใ่พผใ‚€ใ€‚

RTC ใŒๅ‹•ไฝœใ—ใฆใ„ใ‚‹ใ‹ใฏใ€CTRL ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x0c) ใฎ RTC_ACTIVE (ใƒ“ใƒƒใƒˆ 1) ใง็ขบ่ชใงใใ‚‹ใ€‚
ใ“ใฎใƒ“ใƒƒใƒˆใŒ 1 ใงใ‚ใ‚Œใฐๅ‹•ไฝœใ—ใฆใŠใ‚Šใ€0 ใงใ‚ใ‚Œใฐๅ‹•ไฝœใ—ใฆใ„ใชใ„ใ€‚

RTC ใ‹ใ‚‰ๆ™‚ๅˆปใ‚’่ชญใฟ่พผใ‚€

ไปฅไธ‹ใฎๆ‰‹้ †ใงใ€RTC ใŒ็ฎก็†ใ—ใฆใ„ใ‚‹ๆ™‚ๅˆปใ‚’ๅ–ๅพ—ใงใใ‚‹ใ€‚

  1. RTC_0 ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x1c) ใ‹ใ‚‰ๆ›œๆ—ฅใƒปๆ™‚ๅˆปใƒ‡ใƒผใ‚ฟใ‚’่ชญใฟ่พผใ‚€
  2. RTC_1 ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x18) ใ‹ใ‚‰ๆ—ฅไป˜ใƒ‡ใƒผใ‚ฟใ‚’่ชญใฟ่พผใ‚€

ๅฟ…ใš RTC_1 ใƒฌใ‚ธใ‚นใ‚ฟใ‚’่ชญใฟ่พผใ‚€ๅ‰ใซ RTC_0 ใƒฌใ‚ธใ‚นใ‚ฟใ‚’่ชญใฟ่พผใ‚€ใ€‚
ใ“ใ†ใ™ใ‚‹ใ“ใจใงใ€RTC_0 ใƒฌใ‚ธใ‚นใ‚ฟใ‹ใ‚‰่ชญใฟ่พผใ‚€ๆ™‚ใซ RTC_1 ใƒฌใ‚ธใ‚นใ‚ฟใ‹ใ‚‰่ชญใฟ่พผใ‚€ๅ€คใŒๆฑบๅฎšใ•ใ‚Œใ€ๆญฃใ—ใ„ๆ™‚ๅˆปใ‚’ๅ–ๅพ—ใงใใ‚‹ใ‚ˆใ†ใซใชใ‚‹ใ€‚

SETUP_0 ใŠใ‚ˆใณ SETUP_1 ใƒฌใ‚ธใ‚นใ‚ฟใจใฏใ€ 0/1 ใจใƒ‡ใƒผใ‚ฟใฎๅฏพๅฟœ้–ขไฟ‚ใŒ้€†ใงใ‚ใ‚‹ใ€‚

ใ†ใ‚‹ใ†ๅนดๅˆคๅฎšใฎ่ฃœๆญฃใ‚’่กŒใ†

ไปฅไธ‹ใฎๆกไปถใ‚’ๅ…จใฆๆบ€ใŸใ™ๅ ดๅˆใ€2ๆœˆ28ๆ—ฅใฎๆฌกใฎๆ—ฅไป˜ใŒ2ๆœˆ29ๆ—ฅใซใชใ‚‹ใ€‚(ใ†ใ‚‹ใ†ๅนด)

  • ๅนดใฎๅ€คใŒ 4 ใงๅ‰ฒใ‚Šๅˆ‡ใ‚Œใ‚‹
  • FORCE_NOTLEAPYEAR ใƒ“ใƒƒใƒˆใŒ 0 ใงใ‚ใ‚‹

ใใ†ใงใชใ„ๅ ดๅˆใ€2ๆœˆ28ๆ—ฅใฎๆฌกใฎๆ—ฅไป˜ใฏ3ๆœˆ1ๆ—ฅใซใชใ‚‹ใ€‚(ๅนณๅนด)

FORCE_NOTLEAPYEAR ใƒ“ใƒƒใƒˆใฎๅˆคๅฎšใฏ2ๆœˆ28ๆ—ฅใŒ็ต‚ใ‚ใ‚‹ๆ™‚ใซ่กŒใ‚ใ‚Œใ€ใใฎๅ‰ใฎไปปๆ„ใฎใ‚ฟใ‚คใƒŸใƒณใ‚ฐใง่จญๅฎšใ—ใฆใ‚ˆใ„ใ€‚
ใŸใจใˆใฐใ€ๅๅˆ†็Ÿญใ„้–“้š”ใงๆ™‚ๅˆปใ‚’ใƒใƒผใƒชใƒณใ‚ฐใ—ใชใŒใ‚‰็พๅœจๆ™‚ๅˆปใฎๅนดใ ใ‘ใ‚’่ฆ‹ใฆใ€ใใ‚ŒใŒ 100 ใงๅ‰ฒใ‚Šๅˆ‡ใ‚Œใฆ 400 ใงๅ‰ฒใ‚Šๅˆ‡ใ‚Œใชใ„ใชใ‚‰ 1ใ€ใใ†ใงใชใ„ใชใ‚‰ 0 ใ‚’่จญๅฎšใ™ใ‚Œใฐใ‚ˆใ„ใ€‚

FORCE_NOTLEAPYEAR ใƒ“ใƒƒใƒˆใฏใ€CTRL ใƒฌใ‚ธใ‚นใ‚ฟ (ใ‚ชใƒ•ใ‚ปใƒƒใƒˆ 0x0c) ใฎ 8 ใƒ“ใƒƒใƒˆ็›ฎใงใ‚ใ‚‹ใ€‚

RTC ใ‚’ๆ“ไฝœใ™ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใฎๅฎŸ่ฃ…

ใƒžใ‚ทใƒณ่ชž

USR ้–ขๆ•ฐใฎ็ฌฌ2ๅผ•ๆ•ฐใŒ 0 ใฎใจใใฏใ€RTC ใฎ็Šถๆ…‹ใ‚’ๅ–ๅพ—ใ—ใ€RTC ใŒ่ตทๅ‹•ใ—ใฆใ„ใ‚Œใฐๆ™‚ๅˆปใ‚’้…ๅˆ—ใซๆ ผ็ดใ™ใ‚‹ใ€‚
0 ไปฅๅค–ใฎใจใใฏใ€้…ๅˆ—ใซๆ ผ็ดใ•ใ‚Œใฆใ„ใ‚‹ๆ™‚ๅˆปใ‚’ RTC ใซ่จญๅฎšใ—ใ€RTC ใ‚’่ตทๅ‹•ใ™ใ‚‹ใ€‚

RTC ใŒ่ตทๅ‹•ใ—ใฆใ„ใ‚Œใฐ 0 ใ‚’ใ€่ตทๅ‹•ใ—ใฆใ„ใชใ‘ใ‚Œใฐ 1 ใ‚’่ฟ”ใ™ใ€‚

้…ๅˆ—ใฎ่กจ็พใจ RTC ใฎใƒฌใ‚ธใ‚นใ‚ฟใฎ่กจ็พใฎ้–“ใฎๅค‰ๆ›ใ‚„ใ€ใ†ใ‚‹ใ†ๅนดๅˆคๅฎšใฎ่ฃœๆญฃใ‚‚่กŒใ†ใ€‚

RTC ใ‚’ๆ“ไฝœใ™ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ  (ใƒžใ‚ทใƒณ่ชž)
ORG #700
	' ----- ใ‚ณใƒžใƒณใƒ‰ใ‚’็ขบ่ชใ™ใ‚‹ -----
	R0 & R0
	IF !0 GOTO @SET_RTC_VALUE
	' ----- 0๏ผšRTCใฎ็Šถๆ…‹ใ‚’่ชญใฟๅ–ใ‚‹ -----
	R3 = [@RTC_ADDRESS]L
	' RTCใŒๅ‹•ไฝœไธญใ‹ใ‚’็ขบ่ชใ™ใ‚‹
	R0 = [R3 + 3]L
	R0 = R0 >> 2
	IF CS GOTO @RTC_RUNNING_IN_GET
	' RTCใฏๅœๆญขใ—ใฆใ„ใ‚‹ใฎใงใ€1ใ‚’่ฟ”ใ™
	R0 = 1
	RET
@RTC_RUNNING_IN_GET
	' RTCใฎๆ™‚ๅˆปใ‚’่ชญใฟๅ–ใ‚‹
	R1 = [R3 + 7]L ' RTC_0
	R2 = [R3 + 6]L ' RTC_1
	R3 = @ARRAY_ADDRESS
	R0 = R2 << 20
	R0 = R0 >> 28
	[R3 + 1]W = R0 ' MONTH
	R0 = R2 << 27
	R0 = R0 >> 27
	[R3 + 2]W = R0 ' DAY
	R0 = R1 << 11
	R0 = R0 >> 27
	[R3 + 3]W = R0 ' HOUR
	R0 = R1 << 18
	R0 = R0 >> 26
	[R3 + 4]W = R0 ' MIN
	R0 = R1 << 26
	R0 = R0 >> 26
	[R3 + 5]W = R0 ' SEC
	' ใ†ใ‚‹ใ†ๅนด่ฃœๆญฃใฎๅˆคๅฎšใซ็”จใ„ใ‚‹ใŸใ‚ใ€ๅนดใ‚’ๆœ€ๅพŒใซๅ–ๅพ—ใ—ใ€R0ใซ็ฝฎใ
	R0 = R2 << 8
	R0 = R0 >> 20
	[R3]W = R0 ' YEAR
	GOTO @ADJUST_LEAP_YEAR
@SET_RTC_VALUE
	' ----- ้ž0๏ผšRTCใฎๆ™‚ๅˆปใ‚’่จญๅฎšใ—ใ€ๆœ‰ๅŠนๅŒ–ใ™ใ‚‹ -----
	' ้…ๅˆ—ใ‹ใ‚‰ๆ™‚ๅˆปใ‚’่ชญใฟๅ–ใ‚Šใ€ RTC็”จใฎๅฝขๅผใซใ™ใ‚‹
	R3 = @ARRAY_ADDRESS
	R0 = [R3]W ' YEAR
	R0 = R0 << 20
	R1 = R0 >> 8
	R0 = [R3 + 1]W ' MONTH
	R0 = R0 << 28
	R0 = R0 >> 20
	R1 |= R0
	R0 = [R3 + 2]W ' DAY
	R0 = R0 << 27
	R0 = R0 >> 27
	R1 |= R0
	R0 = [R3 + 3]W ' HOUR
	R0 = R0 << 27
	R2 = R0 >> 11
	R0 = [R3 + 4]W ' MIN
	R0 = R0 << 26
	R0 = R0 >> 18
	R2 |= R0
	R0 = [R3 + 5]W ' SEC
	R0 = R0 << 26
	R0 = R0 >> 26
	R2 |= R0
	' ๆ™‚ๅˆปใ‚’RTCใฎใƒฌใ‚ธใ‚นใ‚ฟใซๆ›ธใ่พผใ‚€
	R3 = [@RTC_ADDRESS]L
	[R3 + 1]L = R1 ' SETUP_0
	[R3 + 2]L = R2 ' SETUP_1
	' RTCใŒๅœๆญขไธญใงใ‚ใ‚Œใฐใ€ใ‚ฏใƒญใƒƒใ‚ฏใฎๅˆ†ๅ‘จๆฏ”ใ‚’่จญๅฎšใ™ใ‚‹
	R0 = [R3 + 3]L
	R0 = R0 >> 2
	IF CS GOTO @RTC_RUNNING_IN_SET
	' 46874 ใ‚’ๆ›ธใ่พผใ‚€ (ๅˆ†ๅ‘จๆฏ” = 1 / 46875)
	R0 = #B7
	R0 = R0 << 8
	R0 += #1A
	[R3]L = R0
@RTC_RUNNING_IN_SET
	R3 = [@RTC_SET_ADDRESS]L
	' ๆ™‚ๅˆปใ‚’RTCใซๅๆ˜ ใ•ใ›ใ‚‹
	R0 = `10000
	[R3 + 3]L = R0
	' RTCใ‚’ๅ‹•ไฝœใ•ใ›ใ‚‹
	R0 = 1
	[R3 + 3]L = R0
	' ใ†ใ‚‹ใ†ๅนด่ฃœๆญฃใฎๅˆคๅฎš็”จใซใ€ๅนดใ‚’R0ใซ็ฝฎใ
	R3 = @ARRAY_ADDRESS
	R0 = [R3]W ' YEAR
	R0 = R0 << 20
	R0 = R0 >> 8
@ADJUST_LEAP_YEAR
	' ----- ๅ…ฑ้€š๏ผšใ†ใ‚‹ใ†ๅนดใฎ่ฃœๆญฃๅ‡ฆ็†ใ‚’่กŒใ† -----
	' ใ†ใ‚‹ใ†ๅนดใฎๅฏ่ƒฝๆ€งใŒใชใ„ใจไปฎ็ฝฎใใ™ใ‚‹
	R3 = [@RTC_SET_ADDRESS]L
	' R1 = (R0 * 5) >> 11
	R1 = 5
	R1 *= R0
	R1 = R1 >> 11
	' R1 = 400 * R1
	R2 = 200
	R2 = R2 << 1
	R1 *= R2
	R0 = R0 - R1
	' ๅนดใ‚’400ใงๅ‰ฒใฃใŸไฝ™ใ‚ŠใŒ 100, 200, 300 ใฎใ„ใšใ‚Œใ‹ใ‹ใ‚’ใƒใ‚งใƒƒใ‚ฏใ™ใ‚‹
	R0 -= 100
	IF 0 GOTO @NOT_LEAP_YEAR
	R0 -= 100
	IF 0 GOTO @NOT_LEAP_YEAR
	R0 -= 100
	IF 0 GOTO @NOT_LEAP_YEAR
	' ใ†ใ‚‹ใ†ๅนดใฎๅฏ่ƒฝๆ€งใŒใ‚ใ‚‹
	R3 = [@RTC_CLEAR_ADDRESS]L
@NOT_LEAP_YEAR
	' ๅˆคๅฎš็ตๆžœใ‚’ใƒฌใ‚ธใ‚นใ‚ฟใซๆ›ธใ่พผใ‚€
	R0 = 1
	R0 = R0 << 8
	[R3 + 3]L = R0
	' 0ใ‚’่ฟ”ใ™ (RTCใŒๅ‹•ไฝœไธญใงใ‚ใ‚‹ใ“ใจใ‚’็คบใ™)
	R0 = 0
	RET

ALIGN 4,0,0
@RTC_ADDRESS
	UDATAL #4005C000
@RTC_SET_ADDRESS
	UDATAL #4005E000
@RTC_CLEAR_ADDRESS
	UDATAL #4005F000

ORG #800
@ARRAY_ADDRESS

BASIC

ๆœ€ๅˆใซใ€ใƒžใ‚ทใƒณ่ชžใฎใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’ใ‚ญใƒฃใƒฉใ‚ฏใ‚ฟใƒผใƒ‘ใ‚ฟใƒผใƒณ้ ˜ๅŸŸใซๆ ผ็ดใ™ใ‚‹ใ€‚
ๆฌกใซใ€1ๅ›ž็Šถๆ…‹ใ‚’ๅ–ๅพ—ใ—ใฆ RTC ใŒๅ‹•ไฝœใ—ใฆใ„ใ‚‹ใ‹ใ‚’ๅˆคๅฎšใ—ใ€ๅ‹•ไฝœใ—ใฆใ„ใชใ‘ใ‚Œใฐๆ™‚ๅˆปใฎ่จญๅฎšใจ RTC ใฎ่ตทๅ‹•ใ‚’่กŒใ†ใ€‚

ใใฎๅพŒใฏใ€ๆ™‚ๅˆปใฎใƒใƒผใƒชใƒณใ‚ฐใจ่กจ็คบใ‚’่กŒใ†ใ€‚
ๅค‰ๆ•ฐ S ใ‚’็”จใ„ใฆ่กจ็คบใ—ใŸ็ง’ใ‚’็ฎก็†ใ—ใ€็ง’ใŒๅค‰ใ‚ใฃใฆใ„ใŸใ‚‰่กจ็คบใฎๆ›ดๆ–ฐใ‚’่กŒใ†ใ€‚
ใ“ใฎ้š›ใ€ไธŠไฝใŒ 0 ใงใชใ„็Šถๆ…‹ใซใ—ใฆๅˆ‡ใ‚‹ใ“ใจใงใ€0ๅŸ‹ใ‚ๆŒ‡ๅฎšๆกๆ•ฐ่กจ็คบใ™ใ‚‹ใƒ†ใ‚ฏใƒ‹ใƒƒใ‚ฏใ‚’็”จใ„ใ‚‹ใ€‚

RTC ใ‚’ๆ“ไฝœใ™ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ  (BASIC)
10 ' IchigoJam P RTC
20 POKE#700,0,66,27,209,44,75,216,104,128,8,1,210,1,32,112,71,217,105,154,105,58,163,16,5,0,15,88,128,208,6,192,14,152,128,200,2,192,14,216,128,136,4,128,14,24,129,136,6,128,14,88,129,16,2,0,13
30 POKE#738,24,128,41,224,48,163,24,136,0,5,1,10,88,136,0,7,0,13,1,67,152,136,192,6,192,14,1,67,216,136,192,6,194,10,24,137,128,6,128,12,2,67,88,137,128,6,128,14,2,67,19,75,89,96,154,96,216,104
40 POKE#772,128,8,3,210,183,32,0,2,26,48,24,96,15,75,16,32,216,96,1,32,216,96,29,163,24,136,0,5,0,10,10,75,5,33,65,67,201,10,200,34,82,0,81,67,64,26,100,56,4,208,100,56,2,208,100,56,0,208,4,75,1,32
50 POKE#7B0,0,2,216,96,0,32,112,71,0,192,5,64,0,224,5,64,0,240,5,64
60 S=-1:IF USR(#700,0) INPUT"YEAR =",[0]:INPUT"MONTH=",[1]:INPUT"DAY  =",[2]:INPUT"HOUR =",[3]:INPUT"MIN  =",[4]:INPUT"SEC  =",[5]:X=USR(#700,1)
70 CLS
80 X=USR(#700,0):IF [5]=S WAIT1 ELSE LOCATE6,11:?DEC$([0]+10000,4);"/";DEC$([1]+100,2);"/";DEC$([2]+100,2);" ";DEC$([3]+100,2);":";DEC$([4]+100,2);":";DEC$([5]+100,2):S=[5]
90 GOTO80

ๅฎŸ่กŒ็ตๆžœไพ‹

IchigoJam P ใ‚’ใƒชใ‚ปใƒƒใƒˆใ—ใฆๆœ€ๅˆใซใ“ใฎใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’่ตทๅ‹•ใ™ใ‚‹ใจใ€RTC ใŒๅ‹•ไฝœใ—ใฆใ„ใชใ„ใฎใงใ€่จญๅฎšใ™ใ‚‹ๆ™‚ๅˆปใฎๅ…ฅๅŠ›ใ‚’ๆฑ‚ใ‚ใ‚‹ใ€‚
ๆ™‚ๅˆปใ‚’ๅ…ฅๅŠ›ใ™ใ‚‹ใจใ€ใใฎๆ™‚ๅˆปใ‚’ RTC ใซ่จญๅฎšใ—ใฆ RTC ใ‚’่ตทๅ‹•ใ—ใ€็พๅœจๆ—ฅๆ™‚ใฎ่กจ็คบใซ็งปใ‚‹ใ€‚

2 ๅ›ž็›ฎไปฅ้™ใซ่ตทๅ‹•ใ™ใ‚‹ใจใ€RTC ใŒๅ‹•ไฝœใ—ใฆใ„ใ‚‹ใฎใงใ€ๆœ€ๅˆใ‹ใ‚‰็พๅœจๆ—ฅๆ™‚ใฎ่กจ็คบใ‚’่กŒใ†ใ€‚

ๆ™‚ๅˆปใฎ่กจ็คบ

ใŠใ‚ใ‚Šใซ

IchigoJam P (RP2040) ใซๅ†…่”ตใ•ใ‚Œใฆใ„ใ‚‹ RTC ใฎไฝฟใ„ๆ–นใ‚’็ขบ่ชใ—ใ€ๅฎŸ้š›ใซๆ™‚ๅˆปใฎ่จญๅฎšใ‚„ๅ–ๅพ—ใ‚’่กŒใ†ใ“ใจใŒใงใใŸใ€‚

ไปŠๅ›žใฏใ€ใƒžใ‚ทใƒณ่ชžใฎใƒ—ใƒญใ‚ฐใƒฉใƒ ใง BASIC ใฎๅฎน้‡ใฎๅคง้ƒจๅˆ†ใŒๅŸ‹ใพใฃใฆใ—ใพใ„ใ€ใใ‚Œใ‚’็”จใ„ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใจใ—ใฆใฏๅคงใ—ใŸๅ‡ฆ็†ใŒใงใใฆใ„ใชใ„ใ€‚
ใ“ใ‚Œใฏๅ˜็ด”ใชใ‚จใƒณใ‚ณใƒผใƒ‰ใ‚’็”จใ„ใฆใ„ใ‚‹ใŸใ‚ใงใ‚ใ‚Šใ€ใ‚ˆใ‚ŠๅŠน็އใฎ่‰ฏใ„ใ‚จใƒณใ‚ณใƒผใƒ‰ใ‚’็”จใ„ใŸใ‚Šใ€ใƒžใ‚ทใƒณ่ชžใ‚’ใƒกใƒขใƒชใซๆ ผ็ดใ™ใ‚‹ใƒ—ใƒญใ‚ฐใƒฉใƒ ใจใใ‚Œใ‚’็”จใ„ใŸๅ‡ฆ็†ใ‚’่กŒใ†ใƒ—ใƒญใ‚ฐใƒฉใƒ ใ‚’ๅˆ†ใ‘ใŸใ‚Šใ™ใ‚‹ใ“ใจใงๆ”นๅ–„ใงใใ‚‹ใ“ใจใŒๆœŸๅพ…ใงใใ‚‹ใ€‚

ใจใฏใ„ใˆใ€ใ“ใฎ RTC ใฏ IchigoJam P ใ‚’ใƒชใ‚ปใƒƒใƒˆใ—ใŸใ‚Š้›ปๆบใ‚’ๅˆ‡ใฃใŸใ‚Šใ™ใ‚‹ใจใƒชใ‚ปใƒƒใƒˆใ•ใ‚Œใฆใ—ใพใ„ใ€ๆฌกใซไฝฟใ†้š›ใซใฏๅ†่จญๅฎšใ—ใชใ‘ใ‚Œใฐใชใ‚‰ใชใ„ใ€‚
ใใฎใŸใ‚ใ€ใƒใƒƒใƒ†ใƒชใƒผใƒใƒƒใ‚ฏใ‚ขใƒƒใƒ—ใซใ‚ˆใ‚Š้€ฃ็ถšๅ‹•ไฝœใŒๅฏ่ƒฝใชๅค–้ƒจใฎ RTC ใƒขใ‚ธใƒฅใƒผใƒซใฎๆ–นใŒไฝฟใ„ๅ‹ๆ‰‹ใŒ่‰ฏใ„ใ‹ใ‚‚ใ—ใ‚Œใชใ„ใ€‚
ใ‚‚ใ—ใใฏใ€MixJuice ใชใฉใ‚’ไฝฟ็”จใ—ใฆ่‡ชๅ‹•ใงๅ†่จญๅฎšใ‚’่กŒใ†ใ€ใจใ„ใ†้ธๆŠž่‚ขใ‚‚ใ‚ใ‚‹ใ ใ‚ใ†ใ€‚

ใ“ใฎ่จ˜ไบ‹ใซๆŽฒ่ผ‰ใ—ใŸใ‚ฝใƒผใ‚นใ‚ณใƒผใƒ‰ใฏใ€CC0 1.0 ใงใƒฉใ‚คใ‚ปใƒณใ‚นใ™ใ‚‹ใ€‚

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Comments

No comments

Let's comment your feelings that are more than good

0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Login to continue?

Login or Sign up with social account

Login or Sign up with your email address