v0.1初期インポート
@@ -0,0 +1,123 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | +/*! | |
15 | + @file HardwareInit.c | |
16 | + @brief ハードウェアの初期化をします | |
17 | + @author 山崎裕司 | |
18 | + @date 7-jan-09, new | |
19 | +*/ | |
20 | + | |
21 | +/* SPLINT 用Define */ | |
22 | +#ifdef S_SPLINT_S /* splint 稼働時用判定 */ | |
23 | + | |
24 | +/* コンパイル時に設定されるdefine */ | |
25 | +#ifndef __AVR_ATtiny2313__ | |
26 | +#define __AVR_ATtiny2313__ | |
27 | +#endif | |
28 | + | |
29 | +#endif /* SPLINT 用Define */ | |
30 | + | |
31 | +#include <stdbool.h> /* true */ | |
32 | +#include <ctype.h> | |
33 | +#include <avr/io.h> | |
34 | +#include <avr/interrupt.h> | |
35 | +#include <avr/pgmspace.h> | |
36 | +#include "Usart.h" | |
37 | + | |
38 | +RxBuffer rbuf; | |
39 | + | |
40 | +void InitUsart(void) | |
41 | +{ | |
42 | + rbuf.cdata[0] = '\0'; | |
43 | + rbuf.CRLF = false; | |
44 | +} | |
45 | + | |
46 | + | |
47 | +void InitUsartLower(void) | |
48 | +{ | |
49 | + rbuf.pos = 0; | |
50 | + rbuf.data[0] = '\0'; | |
51 | +} | |
52 | + | |
53 | +/*! | |
54 | + @brief ピンチェンジ割り込み vector 12 | |
55 | +*/ | |
56 | +ISR(/*@unused@*/USART_RX_vect ) | |
57 | +{ | |
58 | + uint8_t rdata; | |
59 | + uint8_t cnt; | |
60 | + | |
61 | + rdata = UDR; | |
62 | + if( ( UCSRA & (USART_FE_MASK | USART_DOR_MASK | USART_PE_MASK) ) != 0 ) | |
63 | + { /* 受信エラー処理 */ | |
64 | + return; /* なにもせずリターン */ | |
65 | + } | |
66 | + if( ( isprint(rdata) != 0 ) ) /* 表示可能文字であれば */ | |
67 | + { | |
68 | + rbuf.data[rbuf.pos] = rdata; | |
69 | + rbuf.data[rbuf.pos + 1] = '\0'; | |
70 | + if(rbuf.pos < (sizeof(rbuf.data) - 2)) | |
71 | + { /* バッファーの残りが2個以上のとき書込み位置を++ */ | |
72 | + rbuf.pos++; | |
73 | + } | |
74 | + } | |
75 | + else /* 表示可能文字以外のとき */ | |
76 | + { | |
77 | + if(rdata == '\n') | |
78 | + { /* 改行を受信したら */ | |
79 | + rbuf.CRLF = true; | |
80 | + | |
81 | + for(cnt = 0; cnt < sizeof(rbuf.data); cnt++) | |
82 | + { /* 受信データ退避 */ | |
83 | + rbuf.cdata[cnt] = rbuf.data[cnt]; | |
84 | + if(rbuf.cdata[cnt] == '\0' ) | |
85 | + { | |
86 | + break; | |
87 | + } | |
88 | + } | |
89 | + rbuf.pos = 0; /* バッファポジションクリア */ | |
90 | + rbuf.data[0] = '\0'; /* 受信バッファクリア */ | |
91 | + } | |
92 | + } | |
93 | +} | |
94 | + | |
95 | +uint8_t CheckCRLF(void) | |
96 | +{ | |
97 | + return rbuf.CRLF; | |
98 | +} | |
99 | + | |
100 | + | |
101 | +char * GetBufPointer(void) | |
102 | +{ | |
103 | + return (char *)(rbuf.cdata); | |
104 | +} | |
105 | + | |
106 | +void UART_write(char c) | |
107 | +{ | |
108 | + /*@ -whileempty @*/while( (UCSRA & USART_UDRE_MASK ) == 0); /* 送信可能状態となるまで待機 */ | |
109 | + UDR = (uint8_t)c; | |
110 | +} | |
111 | + | |
112 | +void SendText_P(PGM_P buf) /* Program space */ | |
113 | +{ | |
114 | + char c; | |
115 | + while((c = pgm_read_byte(buf)) != (char)0) | |
116 | + { | |
117 | + UART_write(c); | |
118 | + buf++; | |
119 | + } | |
120 | + | |
121 | + UART_write('\r'); /* 改行コード */ | |
122 | + UART_write('\n'); /* 改行コード */ | |
123 | +} |
@@ -0,0 +1,180 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | +/*! | |
15 | + @file PulseBoard.c | |
16 | + @brief main関数記述起動後の動作及び起動後の動作です。 | |
17 | + @author 山崎裕司 | |
18 | + @date 9-jan-09, new | |
19 | +*/ | |
20 | + | |
21 | +/* SPLINT 用Define */ | |
22 | +#ifdef S_SPLINT_S /* splint 稼働時用判定 */ | |
23 | + | |
24 | +/* コンパイル時に設定されるdefine */ | |
25 | +#ifndef __AVR_ATtiny2313__ | |
26 | +#define __AVR_ATtiny2313__ | |
27 | +#endif | |
28 | + | |
29 | +#endif /* SPLINT 用Define */ | |
30 | + | |
31 | +#include <stdbool.h> /* true */ | |
32 | +#include <stdlib.h> /* NULL malloc */ | |
33 | +#include <errno.h> /* ERANGEを使用するために必要 */ | |
34 | +#include <ctype.h> | |
35 | +#include <avr/wdt.h> | |
36 | +#include <string.h> /* strtok */ | |
37 | +#include "Modules.h" | |
38 | + | |
39 | +/* ローカル関数 */ | |
40 | +char * FuncKey(char * arg); | |
41 | +char * FuncVer(char * arg); | |
42 | +char * CommandCheck(char *buf); | |
43 | + | |
44 | +/* コマンドリスト */ | |
45 | + | |
46 | +typedef struct { | |
47 | + char Com; /* コマンドキャラクタ */ | |
48 | + char* (*func)(char * arg); /* 戻り値エラーメッセージ 0:エラーなし*/ | |
49 | +} CommList; | |
50 | + | |
51 | +const CommList CList[] = { | |
52 | + {(char)'V', FuncVer}, /* バージョン表示 */ | |
53 | + {(char)'K', FuncKey} /* キー制御 */ | |
54 | +}; | |
55 | + | |
56 | +#define BASE10 10 /* 10進数 strtol用 */ | |
57 | + | |
58 | +#define MAX_COMMAND_NUM (sizeof(CList)/sizeof(CommList)) | |
59 | + | |
60 | + | |
61 | +typedef struct { | |
62 | + uint8_t Key; /* 1~12 */ | |
63 | + bool On; /* On:1 Off :0 */ | |
64 | +} KeyStatus; | |
65 | + | |
66 | +/*! | |
67 | + @brief 起動及びメインループ | |
68 | + @return returnしてはいけない | |
69 | +*/ | |
70 | +int main(void) | |
71 | +{ | |
72 | + (void)GetResetSetRegi(WDT_USE_1S); /*!< リセット情報取得 ウォッチドッグ使用 */ | |
73 | + (void)hardwareInit(); /* ハードウェア初期化 リターン未使用 */ | |
74 | + InitUsart(); /* RX受信バッファの初期化 */ | |
75 | + InitUsartLower(); /* RX受信バッファローレベル層初期化 */ | |
76 | + ResetKey(); /* キー状態の初期化 */ | |
77 | + | |
78 | + | |
79 | + //UART_write('\r'); /* 改行コード */ | |
80 | + //UART_write('\n'); /* 改行コード */ | |
81 | + SendText_P( PSTR(WAKEUP_MESSAGES)); /* 起動メッセージ */ | |
82 | + while(true) | |
83 | + { | |
84 | + /* WDTクリア */ | |
85 | + wdt_reset(); | |
86 | + if(CheckCRLF() == true) | |
87 | + { /* コマンドチェック */ | |
88 | + (void)CommandCheck(GetBufPointer()); | |
89 | + } | |
90 | + } | |
91 | + /*@notreached@*/ | |
92 | + return 0; | |
93 | +} | |
94 | + | |
95 | +char * CommandCheck(char *buf) | |
96 | +{ | |
97 | + char * err_msg; /* エラーメッセージ */ | |
98 | + uint8_t cnt; /* コマンドチェックカウンタ */ | |
99 | + | |
100 | + if( *buf != COMMAND_START_CHARACTER) | |
101 | + { /* コマンドは!から始まる そうでない場合はバッファ初期化 */ | |
102 | + err_msg = PSTR(ERROR_NOT_COMMAND); | |
103 | + goto err; | |
104 | + } | |
105 | + /* コマンドチェック */ | |
106 | + /* 1.コマンドキャラクター */ | |
107 | + buf++; | |
108 | + if( isalpha(*buf) == 0) | |
109 | + { | |
110 | + err_msg = PSTR(ERROR_UNDEFINE_COMMAND); | |
111 | + goto err; | |
112 | + } | |
113 | + /* コマンドリストよりコマンドチェック */ | |
114 | + for(cnt = 0; cnt < MAX_COMMAND_NUM ; cnt++) | |
115 | + { | |
116 | + /* コマンドは1文字であること */ | |
117 | + if( ( *buf == CList[cnt].Com ) && (( isspace(*(buf+1)) != 0) || (*(buf+1) == 0) ) ) | |
118 | + { | |
119 | + err_msg = CList[cnt].func(buf); | |
120 | + if( err_msg != NULL) | |
121 | + { | |
122 | + goto err; | |
123 | + } | |
124 | + InitUsart(); | |
125 | + break; | |
126 | + } | |
127 | + } | |
128 | + return NULL; | |
129 | + | |
130 | +err: /* エラー処理 */ | |
131 | + InitUsart(); | |
132 | + SendText_P(err_msg); | |
133 | + | |
134 | + return err_msg; | |
135 | +} | |
136 | + | |
137 | +/* arg = "K 1 1" -> キー1 ON */ | |
138 | +/* = "K 12 0" -> キー12 OFF */ | |
139 | +char * FuncKey(char * arg) | |
140 | +{ | |
141 | + KeyStatus ks; /* キーステータス キー?をON Off */ | |
142 | + uint8_t on; /* ONOFF情報 */ | |
143 | + char *next; /* strtolエンドポインタ */ | |
144 | + char *sep; /* セパレータ位置保存 */ | |
145 | + | |
146 | + arg++; | |
147 | + /* パラメータ抽出 */ | |
148 | + if( *arg != COMMAND_SEPARATER_CHARACTER) | |
149 | + return PSTR(ERROR_SEPARATER); /* セパレーターエラー */ | |
150 | + arg++; | |
151 | + if( NULL == (sep = strchr(arg,COMMAND_SEPARATER_CHARACTER))) | |
152 | + return PSTR(ERROR_SEPARATER); /* セパレーターエラー */ | |
153 | + *sep = NULL; | |
154 | + ks.Key = (uint8_t)strtol((const char*)arg, &next, BASE10); /* 第1パラメータ */ | |
155 | + if( arg == next ) | |
156 | + return PSTR(ERROR_KEY_PARAMETER); /* 第1パラメータエラー */ | |
157 | + if( ks.Key < MIN_KEY_NUM || ks.Key > MAX_KEY_NUM) | |
158 | + return PSTR(ERROR_KEY_NUMBER); /* キー番号エラー */ | |
159 | + | |
160 | + arg = sep + 1; | |
161 | + on = (uint8_t)strtol(arg, &next, BASE10); /* 第2パラメータ */ | |
162 | + if( arg == next ) | |
163 | + return PSTR(ERROR_ON_PARAMETER); /* 第2パラメータエラー */ | |
164 | + if( on < MIN_ON_NUM || on > MAX_ON_NUM) | |
165 | + return PSTR(ERROR_ON_NUMBER); /* オン番号エラー */ | |
166 | + ks.On = (( on == ON_PARA_INT_ON ) ? ON_PARA_BOOL_ON : ON_PARA_BOOL_OFF ); | |
167 | + | |
168 | + ChangeKeyStatus(ks.Key,ks.On); | |
169 | + | |
170 | + SendText_P(PSTR(OK_KEY_SETTING)); | |
171 | + /*@notreached@*/ | |
172 | + return NULL; | |
173 | + | |
174 | +} | |
175 | + | |
176 | +char * FuncVer(char * arg) | |
177 | +{ | |
178 | + SendText_P(PSTR(VERSION_STRING)); | |
179 | + return NULL; | |
180 | +} |
@@ -0,0 +1,116 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | +/*! | |
15 | + @file HardwareInit.c | |
16 | + @brief ハードウェアの初期化をします | |
17 | + @author 山崎裕司 | |
18 | + @date 7-jan-09, new | |
19 | +*/ | |
20 | + | |
21 | +/* SPLINT 用Define */ | |
22 | +#ifdef S_SPLINT_S /* splint 稼働時用判定 */ | |
23 | + | |
24 | +/* コンパイル時に設定されるdefine */ | |
25 | +#ifndef __AVR_ATtiny2313__ | |
26 | +#define __AVR_ATtiny2313__ | |
27 | +#endif | |
28 | + | |
29 | +#endif /* SPLINT 用Define */ | |
30 | + | |
31 | +#include <avr/io.h> | |
32 | +#include <avr/interrupt.h> | |
33 | +#include <avr/wdt.h> | |
34 | +#include "HardwareInit.h" | |
35 | +#include "Usart.h" | |
36 | + | |
37 | +/* グローバル変数 */ | |
38 | +static uint8_t Reset = 0;/*!< リセット情報取得及び保持 */ | |
39 | + | |
40 | +/* ローカル関数 */ | |
41 | +int hardwareInit(void); | |
42 | +uint8_t GetResetSetRegi(uint8_t wdtcsr); | |
43 | + | |
44 | +/* ■■■ MCUポートセッティング ■■■ | |
45 | +AutoKey 2009.1.9 | |
46 | +No. Name Pin-No. Net name IO Description | |
47 | +1 PA0 5 nouse IN プルダウン | |
48 | +2 PA1 4 nouse IN プルダウン | |
49 | +3 PA2 1 RES IN リセットピン(ROM書込み用) | |
50 | +4 PB0 12 nouse IN プルダウン | |
51 | +5 PB1 13 nouse IN プルダウン | |
52 | +6 PB2 14 /OE OUT 74HC595出力許可 プルアップ | |
53 | +7 PB3 15 /SCLR OUT 74HC595シフトレジスタクリア | |
54 | +8 PB4 16 RCK OUT 74HC595ラッチ信号 | |
55 | +9 PB5 17 MOSI IN ROM書込み用 | |
56 | +10 PB6 18 MISO OUT ROM書込み用 74HC595シリアルデータ出力 | |
57 | +11 PB7 19 SCK OUT ROM書込み用 74HC595シリアルクロック | |
58 | +12 PD0 2 U_RXD IN UART RXD(ホスト側送信) | |
59 | +13 PD1 3 U_TXD OUT UART TXD(ホスト側受信) | |
60 | +14 PD2 6 nouse IN プルダウン | |
61 | +15 PD3 7 nouse IN プルダウン | |
62 | +16 PD4 8 nouse IN プルダウン | |
63 | +17 PD5 9 nouse IN プルダウン | |
64 | +18 PD6 11 nouse IN プルダウン | |
65 | + | |
66 | +*/ | |
67 | + | |
68 | +/*! | |
69 | + @brief ハードウェア初期化関数 | |
70 | + @return HARDINIT_NO_ERROR | |
71 | +*/ | |
72 | +int hardwareInit(void) | |
73 | +{ | |
74 | + int ret = HARDINIT_NO_ERROR; | |
75 | + | |
76 | + /* Prepearing Port Output */ | |
77 | + PORTB = PORT_BIT3_H | PORT_BIT2_H; /* /SCLR:H /OE:H */ | |
78 | + PORTD = PORT_BIT1_H; /* TXD:H */ | |
79 | + | |
80 | + /* Port setting */ | |
81 | + DDRA = DDR_ALLINPUT; /* PORTAは全て入力 */ | |
82 | + DDRB = DDR_BIT7_OUT | DDR_BIT6_OUT | DDR_BIT4_OUT | DDR_BIT3_OUT | DDR_BIT2_OUT; /* OUT 7,6,4,3,2 */ | |
83 | + DDRD = DDR_BIT1_OUT; /* 出力は1のみ */ | |
84 | + | |
85 | + /* UART */ | |
86 | + UBRRH = BPS_38400H; | |
87 | + UBRRL = BPS_38400L; /* 38400bps */ | |
88 | + //UCSRA = UCSRA_RESET; | |
89 | + UCSRB = UCSRB_SET; | |
90 | + //UCSRC = UCSRC_RESET; | |
91 | + | |
92 | + /* 出口処理 */ | |
93 | + sei();/*! 割り込み解除 - Set enable interrupt */ | |
94 | + | |
95 | + return ret; | |
96 | +} | |
97 | + | |
98 | +/*! | |
99 | + @brief リセット情報取得関数 | |
100 | + @return ビットマスク | |
101 | + PON_RESET 0x01 電源ONリセット | |
102 | + EXT_RESET 0x02 外部リセット | |
103 | + BOR_RESET 0x04 電圧低下検知リセット | |
104 | + WDT_RESET 0x08 ウォッチドッグタイマリセット | |
105 | +*/ | |
106 | +uint8_t GetResetSetRegi(uint8_t wdtcsr) | |
107 | +{ | |
108 | + Reset = MCUSR & 0x0f; /* WDRF:WDT BORF:BOR EXTRF:External PORF:PowerOnReset */ | |
109 | + MCUSR = 0; /* 電源ON後直ちにクリア */ | |
110 | + wdt_reset(); /* ウォッチドッグ設定前にタイマをクリア */ | |
111 | + WDTCSR |= WDCE_set; /* WDE及びWDP3-0を変更前に1にセットする。自動的に0にクリアされる */ | |
112 | + WDTCSR = wdtcsr; /* 1秒ウォッチ WDT割り込みは未使用 WDTスタート */ | |
113 | + | |
114 | + return Reset; | |
115 | +} | |
116 | + |
@@ -0,0 +1,87 @@ | ||
1 | +############################################################################### | |
2 | +# Makefile for the project AutoKey | |
3 | +############################################################################### | |
4 | + | |
5 | +## General Flags | |
6 | +PROJECT = AutoKey | |
7 | +MCU = attiny2313 | |
8 | +TARGET = AutoKey.elf | |
9 | +CC = avr-gcc.exe | |
10 | + | |
11 | +## Options common to compile, link and assembly rules | |
12 | +COMMON = -mmcu=$(MCU) | |
13 | + | |
14 | +## Compile options common for all C compilation units. | |
15 | +CFLAGS = $(COMMON) | |
16 | +CFLAGS += -Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums | |
17 | +CFLAGS += -MD -MP -MT $(*F).o -MF dep/$(@F).d | |
18 | + | |
19 | +## Assembly specific flags | |
20 | +ASMFLAGS = $(COMMON) | |
21 | +ASMFLAGS += $(CFLAGS) | |
22 | +ASMFLAGS += -x assembler-with-cpp -Wa,-gdwarf2 | |
23 | + | |
24 | +## Linker flags | |
25 | +LDFLAGS = $(COMMON) | |
26 | +LDFLAGS += -Wl,-Map=AutoKey.map | |
27 | + | |
28 | + | |
29 | +## Intel Hex file production flags | |
30 | +HEX_FLASH_FLAGS = -R .eeprom | |
31 | + | |
32 | +HEX_EEPROM_FLAGS = -j .eeprom | |
33 | +HEX_EEPROM_FLAGS += --set-section-flags=.eeprom="alloc,load" | |
34 | +HEX_EEPROM_FLAGS += --change-section-lma .eeprom=0 --no-change-warnings | |
35 | + | |
36 | + | |
37 | +## Objects that must be built in order to link | |
38 | +OBJECTS = AutoKey.o HardwareInit.o Usart.o 74HC595.o KeyCtrl.o | |
39 | + | |
40 | +## Objects explicitly added by the user | |
41 | +LINKONLYOBJECTS = | |
42 | + | |
43 | +## Build | |
44 | +all: $(TARGET) AutoKey.hex AutoKey.eep AutoKey.lss size | |
45 | + | |
46 | +## Compile | |
47 | +AutoKey.o: ../AutoKey.c | |
48 | + $(CC) $(INCLUDES) $(CFLAGS) -c $< | |
49 | + | |
50 | +HardwareInit.o: ../HardwareInit.c | |
51 | + $(CC) $(INCLUDES) $(CFLAGS) -c $< | |
52 | + | |
53 | +Usart.o: ../Usart.c | |
54 | + $(CC) $(INCLUDES) $(CFLAGS) -c $< | |
55 | + | |
56 | +74HC595.o: ../74HC595.c | |
57 | + $(CC) $(INCLUDES) $(CFLAGS) -c $< | |
58 | + | |
59 | +KeyCtrl.o: ../KeyCtrl.c | |
60 | + $(CC) $(INCLUDES) $(CFLAGS) -c $< | |
61 | + | |
62 | +##Link | |
63 | +$(TARGET): $(OBJECTS) | |
64 | + $(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) | |
65 | + | |
66 | +%.hex: $(TARGET) | |
67 | + avr-objcopy -O ihex $(HEX_FLASH_FLAGS) $< $@ | |
68 | + | |
69 | +%.eep: $(TARGET) | |
70 | + -avr-objcopy $(HEX_EEPROM_FLAGS) -O ihex $< $@ || exit 0 | |
71 | + | |
72 | +%.lss: $(TARGET) | |
73 | + avr-objdump -h -S $< > $@ | |
74 | + | |
75 | +size: ${TARGET} | |
76 | + @echo | |
77 | + @avr-size -C --mcu=${MCU} ${TARGET} | |
78 | + | |
79 | +## Clean target | |
80 | +.PHONY: clean | |
81 | +clean: | |
82 | + -rm -rf $(OBJECTS) AutoKey.elf dep/* AutoKey.hex AutoKey.eep AutoKey.lss AutoKey.map | |
83 | + | |
84 | + | |
85 | +## Other dependencies | |
86 | +-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) | |
87 | + |
@@ -0,0 +1,67 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | + | |
15 | +#define USART_RDATA_READY 1 /* 受信データレディ */ | |
16 | +#define USART_RDATA_EMPTY 0 /* 受信データ空き */ | |
17 | +#define USART_RDATA_ERROR -1 /* 受信エラー */ | |
18 | +#define USART_RXC_MASK 0x80 | |
19 | +#define USART_TXC_MASK 0x40 | |
20 | +#define USART_FE_MASK 0x10 | |
21 | +#define USART_DOR_MASK 0x08 | |
22 | +#define USART_PE_MASK 0x02 | |
23 | +#define USART_UDRE_MASK 0x20 | |
24 | + | |
25 | + | |
26 | +/* UART */ | |
27 | +/* UBRRH : USART Baud Rate Register High-Byte */ | |
28 | +/* UBRRL : USART Baud Rate Resister Low-Byte */ | |
29 | +/* UCSRA : USART Control and Status Register A */ | |
30 | +/* Bit7 RXC : USART Receive Complete Flag */ | |
31 | +/* Bit6 TXC : USART Transmit Complete Flag */ | |
32 | +/* Bit5 UDRE : USART Data Register Empty Flag */ | |
33 | +/* Bit4 FE : USART Framing Error Flag */ | |
34 | +/* Bit3 DOR : Data OverRun Flag */ | |
35 | +/* Bit2 UPE : USART Parity Error Flag */ | |
36 | +/* Bit1 U2X : Double the USART Transmit Speed */ | |
37 | +/* Bit0 MPCP : Multi-Processor Comminucation Mode */ | |
38 | +#define USART_UCSRA_RESET (uint8_t)0x20 | |
39 | +/* UCSRB : USART Control and Status Register B */ | |
40 | +/* Bit7 RXCIE : Receive Complete Interrupt Enable */ | |
41 | +/* Bit6 TXCIE : Transmit Complete Interrupt Enable */ | |
42 | +/* Bit5 UDRIE : Transmit Data Register Empty Interrupt Enable */ | |
43 | +/* Bit4 RXEN : Receiver Enable */ | |
44 | +/* Bit3 TXEN : Transmiter Enable */ | |
45 | +/* Bit2 UCSZ2 : Caracter size */ | |
46 | +/* Bit1 RXB8 : Receive Data bit 8 */ | |
47 | +/* Bit0 TXB8 : Transmit Data bit 8 */ | |
48 | +#define USART_UCSRB_RESET (uint8_t)0x00 | |
49 | +/* 受信割り込み可 受信可 送信可 */ | |
50 | +#define USART_UCSRB_SET (uint8_t)0x98 | |
51 | +/* UCSRC : USART Control and Status Register C */ | |
52 | +/* Bit7 - */ | |
53 | +/* Bit6 UMSEL : USART Mode Select */ | |
54 | +/* Bit5,4 UPM : Parity */ | |
55 | +/* Bit3 USBS : Stop Bit Select */ | |
56 | +/* Bit2,1 UCSZ1,0 : Character size */ | |
57 | +/* Bit0 UCPOL : Clock Polarity */ | |
58 | +/* UDR : USART I/O Data Resiter */ | |
59 | +#define USART_UCSRC_RESET (uint8_t)0x06 | |
60 | + | |
61 | +typedef struct { | |
62 | + uint8_t data[16]; | |
63 | + uint8_t cdata[16]; | |
64 | + uint8_t pos; | |
65 | + uint8_t CRLF; | |
66 | +} RxBuffer; | |
67 | + |
@@ -0,0 +1,169 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | +/*! | |
15 | + @file HardwareInit.h | |
16 | + @brief ハードウェア初期化関連ヘッダ | |
17 | + マクロ定義 | |
18 | + 関数プロトタイプ | |
19 | + @author 山崎裕司 | |
20 | + @date 9-jan-09, new | |
21 | +*/ | |
22 | + | |
23 | +/* マクロ定義 */ | |
24 | +/*! | |
25 | + @brief hardwareInit()関数戻り値 | |
26 | + エラー系マクロ定義 | |
27 | + | |
28 | + @author 山崎裕司 | |
29 | + @date 9-jan-09, new | |
30 | + */ | |
31 | +#define HARDINIT_NO_ERROR 0 /*!< エラーなし */ | |
32 | + | |
33 | +/*! | |
34 | + @brief GetResetInfo()関数戻り値 | |
35 | + エラー系マクロ定義 | |
36 | + | |
37 | + @author 山崎裕司 | |
38 | + @date 9-jan-09, new | |
39 | + */ | |
40 | +#define PON_RESET 0x01 /*!< 電源ONリセット */ | |
41 | +#define EXT_RESET 0x02 /*!< 外部リセット */ | |
42 | +#define BOR_RESET 0x04 /*!< 電圧低下検知リセット */ | |
43 | +#define WDT_RESET 0x08 /*!< ウォッチドッグタイマリセット */ | |
44 | +#define STATUS_READY 0x80 /*!< ステータスバイト準備OK */ | |
45 | + | |
46 | +/*! | |
47 | + @brief GetResetInfo()設定値 | |
48 | + エラー系マクロ定義 | |
49 | + | |
50 | + @author 山崎裕司 | |
51 | + @date 9-jan-09, new | |
52 | + */ | |
53 | +#define WDT_USE_1S 0x1f /*!< ウォッチドッグタイマ使用(1秒) */ | |
54 | +#define WDT_NOUSE 0x00 /*!< ウォッチドッグタイマ未使用 */ | |
55 | + | |
56 | +/* セッティング系定義 */ | |
57 | +/* @brief ビット操作系 */ | |
58 | +#define DDR_BIT0_IN (uint8_t)0x00 /*!< Data Direction Register BIT0 bitmask - IN *******0 */ | |
59 | +#define DDR_BIT0_OUT (uint8_t)0x01 /*!< Data Direction Register BIT0 bitmask - OUT *******1 */ | |
60 | +#define DDR_BIT1_IN (uint8_t)0x00 /*!< Data Direction Register BIT1 bitmask - IN ******0* */ | |
61 | +#define DDR_BIT1_OUT (uint8_t)0x02 /*!< Data Direction Register BIT1 bitmask - OUT ******1* */ | |
62 | +#define DDR_BIT2_IN (uint8_t)0x00 /*!< Data Direction Register BIT2 bitmask - IN *****0** */ | |
63 | +#define DDR_BIT2_OUT (uint8_t)0x04 /*!< Data Direction Register BIT2 bitmask - OUT *****1** */ | |
64 | +#define DDR_BIT3_IN (uint8_t)0x00 /*!< Data Direction Register BIT3 bitmask - IN ****0*** */ | |
65 | +#define DDR_BIT3_OUT (uint8_t)0x08 /*!< Data Direction Register BIT3 bitmask - OUT ****1*** */ | |
66 | +#define DDR_BIT4_IN (uint8_t)0x00 /*!< Data Direction Register BIT4 bitmask - IN ***0**** */ | |
67 | +#define DDR_BIT4_OUT (uint8_t)0x10 /*!< Data Direction Register BIT4 bitmask - OUT ***1**** */ | |
68 | +#define DDR_BIT5_IN (uint8_t)0x00 /*!< Data Direction Register BIT5 bitmask - IN **0***** */ | |
69 | +#define DDR_BIT5_OUT (uint8_t)0x20 /*!< Data Direction Register BIT5 bitmask - OUT **1***** */ | |
70 | +#define DDR_BIT6_IN (uint8_t)0x00 /*!< Data Direction Register BIT6 bitmask - IN *0****** */ | |
71 | +#define DDR_BIT6_OUT (uint8_t)0x40 /*!< Data Direction Register BIT6 bitmask - OUT *1****** */ | |
72 | +#define DDR_BIT7_IN (uint8_t)0x00 /*!< Data Direction Register BIT7 bitmask - IN 0******* */ | |
73 | +#define DDR_BIT7_OUT (uint8_t)0x80 /*!< Data Direction Register BIT7 bitmask - OUT 1******* */ | |
74 | +#define DDR_ALLINPUT (uint8_t)( DDR_BIT7_IN | DDR_BIT6_IN | DDR_BIT5_IN | DDR_BIT4_IN \ | |
75 | + | DDR_BIT3_IN | DDR_BIT2_IN | DDR_BIT1_IN | DDR_BIT0_IN ) /*!< DDR ALL input pins */ | |
76 | +#define DDR_ALLOUTPUT (uint8_t)( DDR_BIT7_OUT | DDR_BIT6_OUT | DDR_BIT5_OUT | DDR_BIT4_OUT \ | |
77 | + | DDR_BIT3_OUT | DDR_BIT2_OUT | DDR_BIT1_OUT | DDR_BIT0_OUT ) /*!< DDR ALL output pins */ | |
78 | + | |
79 | +#define PORT_BIT0_H (uint8_t)0x01 /*!< PORTピンビット0H出力 */ | |
80 | +#define PORT_BIT1_H (uint8_t)0x02 /*!< PORTピンビット1H出力 */ | |
81 | +#define PORT_BIT2_H (uint8_t)0x04 /*!< PORTピンビット2H出力 */ | |
82 | +#define PORT_BIT3_H (uint8_t)0x08 /*!< PORTピンビット3H出力 */ | |
83 | +#define PORT_BIT4_H (uint8_t)0x10 /*!< PORTピンビット4H出力 */ | |
84 | +#define PORT_BIT5_H (uint8_t)0x20 /*!< PORTピンビット5H出力 */ | |
85 | +#define PORT_BIT6_H (uint8_t)0x40 /*!< PORTピンビット6H出力 */ | |
86 | +#define PORT_BIT7_H (uint8_t)0x80 /*!< PORTピンビット7H出力 */ | |
87 | + | |
88 | +#define WDCE_set (uint8_t)0x08 /*!< ウォッチドッグ変更許可 bitmask set ****1*** */ | |
89 | + | |
90 | +/* UART */ | |
91 | +/* UBRRH : USART Baud Rate Register High-Byte */ | |
92 | +/* UBRRL : USART Baud Rate Resister Low-Byte */ | |
93 | +/* UCSRA : USART Control and Status Register A */ | |
94 | +/* Bit7 RXC : USART Receive Complete Flag */ | |
95 | +/* Bit6 TXC : USART Transmit Complete Flag */ | |
96 | +/* Bit5 UDRE : USART Data Register Empty Flag */ | |
97 | +/* Bit4 FE : USART Framing Error Flag */ | |
98 | +/* Bit3 DOR : Data OverRun Flag */ | |
99 | +/* Bit2 UPE : USART Parity Error Flag */ | |
100 | +/* Bit1 U2X : Double the USART Transmit Speed */ | |
101 | +/* Bit0 MPCP : Multi-Processor Comminucation Mode */ | |
102 | +#define UCSRA_RESET (uint8_t)0x20 | |
103 | +/* UCSRB : USART Control and Status Register B */ | |
104 | +/* Bit7 RXCIE : Receive Complete Interrupt Enable */ | |
105 | +/* Bit6 TXCIE : Transmit Complete Interrupt Enable */ | |
106 | +/* Bit5 UDRIE : Transmit Data Register Empty Interrupt Enable */ | |
107 | +/* Bit4 RXEN : Receiver Enable */ | |
108 | +/* Bit3 TXEN : Transmiter Enable */ | |
109 | +/* Bit2 UCSZ2 : Caracter size */ | |
110 | +/* Bit1 RXB8 : Receive Data bit 8 */ | |
111 | +/* Bit0 TXB8 : Transmit Data bit 8 */ | |
112 | +#define UCSRB_RESET (uint8_t)0x00 | |
113 | +/* 受信割り込み可 受信可 送信可 */ | |
114 | +#define UCSRB_SET (uint8_t)0x98 | |
115 | +/* UCSRC : USART Control and Status Register C */ | |
116 | +/* Bit7 - */ | |
117 | +/* Bit6 UMSEL : USART Mode Select */ | |
118 | +/* Bit5,4 UPM : Parity */ | |
119 | +/* Bit3 USBS : Stop Bit Select */ | |
120 | +/* Bit2,1 UCSZ1,0 : Character size */ | |
121 | +/* Bit0 UCPOL : Clock Polarity */ | |
122 | +/* UDR : USART I/O Data Resiter */ | |
123 | +#define UCSRC_RESET (uint8_t)0x06 | |
124 | + | |
125 | +#define BPS_38400H (uint8_t)0 | |
126 | +#define BPS_38400L (uint8_t)12 | |
127 | + | |
128 | +/* 74HC595 Device driver */ | |
129 | +#define SCLR_BIT PORT_BIT3_H /*!< /SCLRビット */ | |
130 | +#define RCK_BIT PORT_BIT4_H /*!< RCKビット */ | |
131 | +#define OE_BIT PORT_BIT2_H /*!< /OEビット */ | |
132 | + | |
133 | +/* USI */ | |
134 | +/* USIの初期設定 */ | |
135 | +/* USICR : USI Control Resister */ | |
136 | +/* Bit7 USISIE : Start Condition Interrupt Enable */ | |
137 | +/* -> use Default(0) */ | |
138 | +/* Bit6 USIOIE : Counter Overflow Interrupt Enable */ | |
139 | +/* -> use Default(0) */ | |
140 | +/* Bit5,4 USIWM1,0 : Wire Mode */ | |
141 | +/* -> 3wire (USIWM1:0 USIWM0:1) */ | |
142 | +/* Bit3,2 USICS1,0 : Clock Source Select */ | |
143 | +/* -> Counter Overflow(USICS1:0 USICS0:1) */ | |
144 | +/* Bit1 USICLK : USI Clock Strobe */ | |
145 | +/* -> use default(0) */ | |
146 | +/* Bit0 USI Toggle Clock Port Pin */ | |
147 | +/* -> use default(0) */ | |
148 | +/* Bit 7 6 5 4 3 2 1 0 */ | |
149 | +/* 0 0 0 1 0 0 0 0 */ | |
150 | +#define USI_INIT (uint8_t)0x10 | |
151 | +/* Bit 7 6 5 4 3 2 1 0 */ | |
152 | +/* 0 0 0 1 0 0 1 1 */ | |
153 | +#define USI_CLOCK_STROBE (uint8_t)0x13 | |
154 | +/* Bit 7 6 5 4 3 2 1 0 */ | |
155 | +/* 0 0 0 1 0 0 0 1 */ | |
156 | +#define USI_CLOCK_STROBE_L (uint8_t)0x11 | |
157 | +/* USISR USI Status Resiter */ | |
158 | +/* Bit7 USISIF : Start Condition Interrupt Flag */ | |
159 | +/* -> no use */ | |
160 | +/* Bit6 USIOIF : Counter Overflow Interrupt Flag */ | |
161 | +/* -> set(1) : This Flag Clear */ | |
162 | +/* Bit5 USIPF : Stop Condition Flag */ | |
163 | +/* -> no use */ | |
164 | +/* Bit4 USIDC : Data Output Collision Flag */ | |
165 | +/* -> no use */ | |
166 | +/* Bit3-0 USICNT3-0 : Counter Value */ | |
167 | +/* -> no use */ | |
168 | +#define USI_FLAG_CLEAR (uint8_t)0x40 | |
169 | +#define USI_MASK_USIOIF (uint8_t)0x40 |
@@ -0,0 +1,98 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | + | |
15 | +#include <avr/io.h> | |
16 | +#include "HardwareInit.h" | |
17 | + | |
18 | + | |
19 | +void ResetParaIO(void); | |
20 | +void SetParaIO(uint16_t sdata); | |
21 | +void SendUsi(uint8_t data); | |
22 | + | |
23 | +/*! | |
24 | + @brief 74HC595リセット関数 | |
25 | + /SCLRでFFをクリアした後RCK(/CS)で出力をラッチする | |
26 | +*/ | |
27 | +void ResetParaIO(void) | |
28 | +{ | |
29 | + /* AVR起動時状態 */ | |
30 | + /* MISO(SI):L /OE:H RCK:L /SCLR:H SCK:L */ | |
31 | + /* 出力:ディセーブル */ | |
32 | + /* シフトレジスタクリア:未初期化状態 */ | |
33 | + /* チップセレクト:ネゲート */ | |
34 | + /* 出力ラッチデータ:不定(ただし出力はHi-Z) */ | |
35 | + /* この関数終了時時は次の状態となる */ | |
36 | + /* 出力:イネーブル */ | |
37 | + /* シフトレジスタクリア:初期化状態(すべて0) */ | |
38 | + /* チップセレクト:ネゲート */ | |
39 | + /* 出力ラッチデータ:すべてL */ | |
40 | + /* この関数で行う処理 */ | |
41 | + /* 1. /SCLRをL */ | |
42 | + /* 2. RCKをH->L (初期化完了) */ | |
43 | + /* 3. /SCLRをH */ | |
44 | + /* 4. /OEをL (出力イネーブル) */ | |
45 | + /* MISO(SI):L /OE:L RCK:L /SCLR:H SCK:L */ | |
46 | + | |
47 | + PORTB &= ~SCLR_BIT; /* /SCLRビットをL */ | |
48 | + PORTB |= RCK_BIT; /* RCKビットをH */ | |
49 | + PORTB &= ~RCK_BIT; /* RCKビットをL */ | |
50 | + PORTB |= SCLR_BIT; /* /SCLRビットをH */ | |
51 | + PORTB &= ~OE_BIT; /* OEビットをL */ | |
52 | + | |
53 | + /* USIの初期設定 */ | |
54 | + USICR = USI_INIT; /* USI初期化 3線式 カウンタ使用 */ | |
55 | +} | |
56 | + | |
57 | +/*! | |
58 | + @brief 74HC595リセット関数 | |
59 | + /SCLRでFFをクリアした後RCKで出力をラッチする | |
60 | +*/ | |
61 | +void SetParaIO(uint16_t sdata) | |
62 | +{ | |
63 | + /* AVR起動時状態 */ | |
64 | + /* MISO(SI):L /OE:L RCK:L /SCLR:H SCK:L */ | |
65 | + /* この関数で行う処理 */ | |
66 | + /* 1. USI上位8ビット出力 */ | |
67 | + /* 2. USI下位8ビット出力 */ | |
68 | + /* 3. RCK H->L */ | |
69 | + /* 4. MISO(SI):L */ | |
70 | + /* MISO(SI):- /OE:L RCK:L /SCLR:H SCK:L */ | |
71 | + | |
72 | + SendUsi((uint8_t)(sdata >> 8)); | |
73 | + SendUsi((uint8_t)sdata); | |
74 | + PORTB |= RCK_BIT; /* RCKビットをH */ | |
75 | + PORTB &= ~RCK_BIT; /* RCKビットをL */ | |
76 | + | |
77 | +} | |
78 | + | |
79 | + | |
80 | +/*! | |
81 | + @brief USI同期シリアル出力関数 | |
82 | + SCK 立ち上がりエッジ MSBファースト 8ビット | |
83 | + クロックレート: Hz | |
84 | +*/ | |
85 | +#define CLOCK_BITS 8 | |
86 | +void SendUsi(uint8_t data) | |
87 | +{ | |
88 | + uint8_t cnt; | |
89 | + USIDR = data; /* データセット */ | |
90 | + //USISR = USISR & USI_FLAG_CLEAR; /* Overflowフラグクリア */ | |
91 | + //do{ | |
92 | + for ( cnt = 0; cnt < CLOCK_BITS; cnt++) | |
93 | + { | |
94 | + USICR = USI_CLOCK_STROBE_L; /* カウンター動作 */ | |
95 | + USICR = USI_CLOCK_STROBE; /* カウンター動作 */ | |
96 | + } | |
97 | + //}while( ( USISR & USI_MASK_USIOIF) == 0); /* 8ビット出力後USIOIFは1となる */ | |
98 | +} |
@@ -0,0 +1,26 @@ | ||
1 | +-------------------------------------------------------------------- | |
2 | +Copyright (c) 2009 Yama | |
3 | +All rights reserved. | |
4 | + | |
5 | +Redistribution and use in source and binary forms, with or without | |
6 | +modification, are permitted provided that the following conditions | |
7 | +are met: | |
8 | +1. Redistributions of source code must retain the above copyright | |
9 | + notice, this list of conditions and the following disclaimer. | |
10 | +2. Redistributions in binary form must reproduce the above copyright | |
11 | + notice, this list of conditions and the following disclaimer in the | |
12 | + documentation and/or other materials provided with the distribution. | |
13 | +3. The name of the author may not be used to endorse or promote products | |
14 | + derived from this software without specific prior written permission. | |
15 | + | |
16 | +THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
17 | +IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
18 | +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
19 | +IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
20 | +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
21 | +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
22 | +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
23 | +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
24 | +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
25 | +THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
26 | + |
@@ -0,0 +1,58 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | + | |
15 | +#include <avr/io.h> | |
16 | +#include "Modules.h" | |
17 | + | |
18 | +static Key keydata; | |
19 | + | |
20 | +void ResetParaIO(void); | |
21 | +void SetParaIO(uint16_t sdata); | |
22 | + | |
23 | +void ResetKey(void); | |
24 | + | |
25 | +void ResetKey(void) | |
26 | +{ | |
27 | + keydata.u.byte = 0; | |
28 | + ResetParaIO(); | |
29 | +} | |
30 | + | |
31 | +void ChangeKeyStatus(uint8_t Key, bool On) | |
32 | +{ | |
33 | + /* パラメータチェックは行わない */ | |
34 | + if(Key == 0) | |
35 | + { /* 全てのキーに対して */ | |
36 | + if(On == ON_PARA_BOOL_ON) | |
37 | + { /* 全てON */ | |
38 | + keydata.u.byte = ON_PARA_ALL_ON; | |
39 | + } | |
40 | + else | |
41 | + { /* 全てのキーがOFF */ | |
42 | + keydata.u.byte = ON_PARA_ALL_OFF; | |
43 | + } | |
44 | + } | |
45 | + else | |
46 | + { /* 個々のキーに対して */ | |
47 | + if(On == ON_PARA_BOOL_ON) | |
48 | + { /* ONにする */ | |
49 | + keydata.u.byte |= (uint16_t)1 << (Key - 1); | |
50 | + } | |
51 | + else | |
52 | + { /* Offにする */ | |
53 | + keydata.u.byte &= ~( (uint16_t)1<< (Key - 1)); | |
54 | + } | |
55 | + } | |
56 | + SetParaIO(keydata.u.byte); | |
57 | + | |
58 | +} |
@@ -0,0 +1,93 @@ | ||
1 | +/* | |
2 | + * Copyright (c) 2009, Yama | |
3 | + * All rights reserved. | |
4 | + * | |
5 | + * | |
6 | + * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、以下の条件を満たす場合に限り、再頒布および使用が許可されます。 | |
7 | + * | |
8 | + * ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
9 | + * バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の資料に、上記の著作権表示、本条件一覧、および下記免責条項を含めること。 | |
10 | + * 書面による特別の許可なしに、本ソフトウェアから派生した製品の宣伝または販売促進に、<組織>の名前またはコントリビューターの名前を使用してはならない。 | |
11 | + * 本ソフトウェアは、著作権者およびコントリビューターによって「現状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、および特定の目的に対する適合性に関する暗黙の保証も含め、またそれに限定されない、いかなる保証もありません。著作権者もコントリビューターも、事由のいかんを問わず、 損害発生の原因いかんを問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その他の)不法行為であるかを問わず、仮にそのような損害が発生する可能性を知らされていたとしても、本ソフトウェアの使用によって発生した(代替品または代用サービスの調達、使用の喪失、データの喪失、利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害について、一切責任を負わないものとします。 | |
12 | + */ | |
13 | + | |
14 | +#include <stdbool.h> /* true */ | |
15 | +#include <avr/pgmspace.h> | |
16 | + | |
17 | + | |
18 | +#define WDT_USE_1S 0x1f /*!< ウォッチドッグタイマ使用(1秒) */ | |
19 | +#define WDT_NOUSE 0x00 /*!< ウォッチドッグタイマ未使用 */ | |
20 | + | |
21 | +/* 関数定義 */ | |
22 | +int hardwareInit(void); | |
23 | +uint8_t GetResetSetRegi(uint8_t wdtcsr); | |
24 | + | |
25 | +/* パラレルIO制御 */ | |
26 | +void ResetParaIO(void); | |
27 | +void SetParaIO(uint16_t sdata); | |
28 | +void SendUsi(uint8_t data); | |
29 | + | |
30 | +/* キー制御 */ | |
31 | +void ResetKey(void); | |
32 | +void ChangeKeyStatus(uint8_t Key, bool On); /* Key 1~12, On:true Off:false */ | |
33 | + | |
34 | +/* UART制御 */ | |
35 | +void InitUsart(void); | |
36 | +void InitUsartLower(void); | |
37 | +uint8_t CheckCRLF(void); | |
38 | +char * GetBufPointer(void); | |
39 | + | |
40 | +void SendText_P(PGM_P buf); | |
41 | + | |
42 | +typedef struct { | |
43 | + uint16_t K1:1; | |
44 | + uint16_t K2:1; | |
45 | + uint16_t K3:1; | |
46 | + uint16_t K4:1; | |
47 | + uint16_t K5:1; | |
48 | + uint16_t K6:1; | |
49 | + uint16_t K7:1; | |
50 | + uint16_t K8:1; | |
51 | + uint16_t K9:1; | |
52 | + uint16_t K10:1; | |
53 | + uint16_t K11:1; | |
54 | + uint16_t K12:1; | |
55 | + uint16_t RSV:4; | |
56 | +}KeyBit; | |
57 | + | |
58 | +typedef struct { | |
59 | + union | |
60 | + { | |
61 | + uint16_t byte; | |
62 | + KeyBit bit; | |
63 | + }u; | |
64 | +} Key; | |
65 | + | |
66 | +#define MIN_KEY_NUM 0 /* キーは1から12 0指定時すべてのキーに対してのコマンド */ | |
67 | +#define MAX_KEY_NUM 12 /* キーは1から12 0指定時すべてのキーに対してのコマンド */ | |
68 | +#define MIN_ON_NUM 0 /* ONは0から1 */ | |
69 | +#define MAX_ON_NUM 1 /* ONは0から1 */ | |
70 | +#define ON_PARA_INT_ON 1 /* 1(true)のときON */ | |
71 | +#define ON_PARA_INT_OFF 0 /* 0(false)のときOFF */ | |
72 | +#define ON_PARA_BOOL_ON true /* 1(true)のときON */ | |
73 | +#define ON_PARA_BOOL_OFF false /* 0(false)のときOFF */ | |
74 | +#define ON_PARA_ALL_ON 0x0fff /* 全てのキーがON */ | |
75 | +#define ON_PARA_ALL_OFF 0x0000 /* 全てのキーがOFF */ | |
76 | + | |
77 | +#define COMMAND_START_CHARACTER '!' /* コマンド開始キャラクター */ | |
78 | +#define COMMAND_SEPARATER_CHARACTER ' ' /* コマンドセパレータキャラクター */ | |
79 | + | |
80 | +/* AVRコンパイラの制約でリテラルをROMに配置するには一度配列に置かないといけない */ | |
81 | +/* エラー系応答文字列 */ | |
82 | +#define ERROR_NOT_COMMAND "!E0" /* コマンドではない */ | |
83 | +#define ERROR_UNDEFINE_COMMAND "!E1" /* 未定義のコマンド */ | |
84 | +#define ERROR_KEY_PARAMETER "!E2" /* キーパラメータエラー */ | |
85 | +#define ERROR_KEY_NUMBER "!E3" /* キー番号指定エラー */ | |
86 | +#define ERROR_ON_PARAMETER "!E4" /* ONパラメータエラー */ | |
87 | +#define ERROR_ON_NUMBER "!E5" /* キー番号指定エラー */ | |
88 | +#define ERROR_SEPARATER "!E6" /* コマンドパラメータのセパレータキャラクタエラー */ | |
89 | + | |
90 | +/* 正常系文字列応答 */ | |
91 | +#define WAKEUP_MESSAGES "!W" /* 起動メッセージ */ | |
92 | +#define OK_KEY_SETTING "!P" /* 設定OK Pass */ | |
93 | +#define VERSION_STRING "!V 0.1" /* バージョン文字列 */ |