usbkeyを使ってみよう

環境を作る

mbedと同じようにCode::Blocksを用います。
  1. コンパイラをダウンロードする
    ここからWinAVRをダウンロードします
  2. WinAVRをインストールします。
  3. コンパイル後はそれをusbkeyに送らなければいけません。これにはFlipを用います。
    atmelからダウンロードします。
  4. Code::Blocksをダウンロードします
    ここからダウンロードします。
  5. Code::Blocksを起動させ、新規プロジェクトの作成をクリックする。


  6. 左側で「プロジェクト」を選び、「AVR Project」を選択し、GOボタンを押す。


  7. プロジェクトはC:\usbkey\progフォルダの中に作るとします。「プロジェクトを作成するフォルダ」の右側の「...」をクリックするとそのフォルダ選択ウィンドウが出ます。下図のようにprogを選択してください。無ければ新しいフォルダーの作成ボタンを押してフォルダを作ってください。


  8. プロジェクト名を入れてください。ここではBlinkyにしました。プロジェクトを作成するフォルダが、間違っていたら訂正してください。


  9. ここは何もすることが無いので次へ。


  10. 「このプロジェクトのプロセッサを選択してください」で、右の▼を押して「at90usb1287」を選択してください。


  11. ここからの設定はCPUなどを変更しない限り初回のみです。
    メニューの「設定」、「コンパイラとデバッガを選択してください。

  12. コンパイラ設定タブが選ばれているはずです。。「コンパイラの選択」で「GNU GCC Compiler」を選択し、次に「GNU ARM GCC Compiler」を選択してください。



  13. ソースの中のmain.cを開くと次のようになります。


  14. メニュー左端の歯車アイコンをクリックするとコンパイルされます。


  15. コンパイルが成功すると、「0個のエラー」と表示されるので、これでコンパイル環境設定が正常に出来たことが分かります。



Blinkyプログラムの完成と転送&実行

以下のソースプログラムを、Code::Blocksに入れます。

LEDを点滅させるプログラム main.c
#include <avr/io.h>

#include "my_bit.h"
#include "my_types.h"


//Se project config freq in Hz
#ifdef F_CPU
	#undef F_CPU
#endif
#define F_CPU 1000000UL  // 8 MHz
#include <util/delay.h>

#define SLEEP_TIME 500

int main(void){
//PD4..7
DDRD SET_BIT4;
DDRD SET_BIT5;
DDRD SET_BIT6;
DDRD SET_BIT7;


    while(1)
    {
	    PORTD SET_BIT4;
	    _delay_ms(SLEEP_TIME);
	    PORTD CLEAR_BIT4;

	    PORTD SET_BIT5;
	    _delay_ms(SLEEP_TIME);
	    PORTD CLEAR_BIT5;

	    PORTD SET_BIT7;
	    _delay_ms(SLEEP_TIME);
	    PORTD CLEAR_BIT7;

	    PORTD SET_BIT6;
	    _delay_ms(SLEEP_TIME);
 	    PORTD CLEAR_BIT6;

    }
}
 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
10 
11 8000000ULでなければいけないのだが、おかしい
12 
13 
14 500ms毎に点滅
15 
16 
17 
18 出力に設定する
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 


my_bit.h
/**
 * My bitwise operations.
 * "~" (tilde) = NOT ... "|" (pipe) = OR ... "^" (caret) = XOR ... "&" (ampersand) = AND
 * ">>" = right shift ... "<<" = left shift
 * See the Bitwise_operation Wiki for more info - http://en.wikipedia.org/wiki/Bitwise_operation
 */

#ifndef __MY_BIT
#define __MY_BIT

#define SET_ALL  |= 0xFF; 
#define SET_BIT0 |= 0x01; 
#define SET_BIT1 |= 0x02;
#define SET_BIT2 |= 0x04;
#define SET_BIT3 |= 0x08;
#define SET_BIT4 |= 0x10;
#define SET_BIT5 |= 0x20;
#define SET_BIT6 |= 0x40;
#define SET_BIT7 |= 0x80;

#define CLEAR_ALL  &= 0x00;
#define CLEAR_BIT0 &= 0xFE;
#define CLEAR_BIT1 &= 0xFD;
#define CLEAR_BIT2 &= 0xFB;
#define CLEAR_BIT3 &= 0xF7;
#define CLEAR_BIT4 &= 0xEF;
#define CLEAR_BIT5 &= 0xDF;
#define CLEAR_BIT6 &= 0xBF;
#define CLEAR_BIT7 &= 0x7F;


//TO_VAR, FROM_VAR unsigned char
//BIT_NUM the bit to get 0..7
// input byte is FROM_VAR
// return value: TO_VAR = 0 or TO_VAR = 1
// process: set TO = FROM; right shift it so the relevant bit is now bit 0; 
// & with 1 to remove all other bits (TO_VAR can now only equal 1 or 0)
#define GET_BIT(TO_VAR, FROM_VAR, BIT_NUM)  {\
  TO_VAR=FROM_VAR;\
  TO_VAR>>=BIT_NUM;\
  TO_VAR&=0x01;\
}

// Some alternative macros for bit manipulation
// Usage eg: BIT_SET(ADMUX, BIT(REFS0));  // Set reference to AVcc
#define BIT(x)                (1 << (x))  // replacement for the poorly named _BV

#define SET_BIT(var, mask)    ((var) |= (unsigned char)(mask))
#define CLEAR_BIT(var, mask)  ((var) &= (unsigned char)~(mask))
#define TOGGLE_BIT(var, mask) ((var) ^= (unsigned char)(mask))
#define READ_BIT(var, mask)   ((var) &  (unsigned char)(mask))

#define ASSIGN_BIT(var, val, mask) ((var) = (((var)&~(unsigned char)(mask))|((val)&(unsigned char)(mask))))

#endif //__MY_BIT


my_types.h
/**
* My typedef:s so I don't have to type unsigned all the time.
*/

#ifndef __MY_TYPES
#define __MY_TYPES

typedef unsigned char uChar;
typedef unsigned int  uInt;
typedef unsigned long uLong; 

#endif //__MY_TYPES


コンパイル結果を転送する
  1. Flipを動かします。
    一番始めは、CPUの設定になります。
    AT90USB1287を選びます


  2. 転送するファイルを選びます。
    File→Load HEX File...

    目的のフォルダに行き、HEXファイルを選択します。


  3. usbkeyを転送モードにする。
    始めての使用の場合、転送用のドライバをインストールする必要があります。


    転送モードにするには、上記画像のRSTとHWBを同時に押して、次にRSTを離し、最後にHWBを離します。するとパソコンが「ポコン」と音がして認識されます。
  4. 左から2番目のUSBアイコンをクリックし、USBの接続をします。

  5. openをクリックします。


  6. runボタンを押します。
    Flashメモリの内容が消去され、ファイルを転送し、確認されます


  7. Resetの選択のチェックを外し、Start Applicationをクリックします。


    これでusbkey上の4つのLEDが順に点滅します。

Visual Studioでプログラムする

Atmel AVR Studio 5.1をダウンロードする

ここからダウンロードします。ただし、登録が必要で、登録したメールアドレスにダウンロードサイトが送られてきます。このメールが届くのがちょっと遅めです。遊びながら待っていましょう。
インストールもかなり時間がかかります。
  1. AVR Studio 5.1をクリックします。

  2. New Project...をクリックします。



  3. AVRGCC C Executable Projectをダブルクリックする。

  4. デバイスの選択をします。ここでもAT90USB1287を選択する。

  5. my_bit.hとmy_types.hをソースフォルダにコピーして入れる。
  6. ビルドする。


  7. コンパイルが成功すると、以下のように表示される。



  8. プログラムを転送する。