2015年3月28日土曜日

USBCAN 改造

USBCAN
変換器を購入したはいいが、ドライバーが不明なので、
ファームウエアを作り込むことにした。

まずは、ハードウエアの確認。
USBSerial:CH340
MCU: STM32F103C8
OSC 8MHz
EEPROM: ATMEL 24C02
CAN PHY: 82C250 (5V)

MCU PORT:
pin func
44 BOOT0
30 PA9 USART1RX CH340へ
31 PA10 USART1TX CH340へ
32 PA11 CANRX
33 PA12 CANTX
41 PB5 LED 赤
21 PB10 I2CSCL EEPROMへ
22 PB11 I2CSDA EEPROMへ
25 PB12 LED 緑

基板上でBOOT0 がスルホールに出ているので
コネクタにひきだしてみた。

あとは、BOOT0をショートさせてUSBコネクタを差し通電すれば
BOOTモードに移行する。

Flash書き換えツールは
stsw-mcu005.zip
を使用した

2015.03.28

2015年3月18日水曜日

疑似マルチタスク 850

hamayanさんのマルチタスク2 を RH850版で確認できた。
http://hamayan.blog.so-net.ne.jp/2012-12-27
修正箇所は2か所。
1. dispatch_850.asm
 ;/* RH850 CC-RH */  
  .section ".text", text  
  .public _swi_ctx ;/*実行コンテキストの切替*/  
  .public _sta_ctx ;/*コンテキストをロードし、タスクを開始*/  
 ;/************************************************  
 ; コンテキストをロードし、タスクを開始  
 ; void sta_ctx(  
 ;  void *exe ) //実行コンテキストの保存先  
 ;************************************************/  
 _sta_ctx:  
  push  lp  
  ld.w  [r6],sp   ;/*スタックポインタ設定*/  
  popsp r20,r31  
  jmp  [lp]  
 ;/************************************************  
 ; 実行コンテキストの切替  
 ; void swi_ctx(  
 ;  void *pre,  //現在のコンテキストの保存先  
 ;  void *post) //切り替えるコンテキスト  
 ;************************************************/  
 _swi_ctx:  
  pushsp r20,r31  
  st.w  sp,[r6]   ;/*スタックポインタ保存*/  
  ld.w  [r7],sp   ;/*スタックポインタ復帰*/  
  popsp r20,r31  
  jmp  [lp]  
2. mul_tsk.c
修正箇所reg_tsk()
 /****************************************************************************/  
 /* タスク登録                                */  
 /* タスクID、エントリーポイント、スタック領域、スタックサイズ、       */  
 /* 起動時引数を4つまで登録できる。              、       */  
 /****************************************************************************/  
 ER reg_tsk( ID tid, void *tsk, void *stk, int stk_sz,  
  VP_INT exinf1, VP_INT exinf2, VP_INT exinf3, VP_INT exinf4 )  
 {  
  VP_INT *ptr;  
  if( tid < 0 || tid >= MAX_TASK_NUMBER ) return E_ID;  
  /*タスクのスタックの初期化*/  
  tcb[tid].sp = (void *)((char *)stk + stk_sz - (4 * (12))); /*r20からr31までこの領域に保存される*/  
  ptr = (VP_INT *)tcb[tid].sp;  
  ptr[ 0] = (VP_INT)tsk; /*LP(R31)*/  
  ptr[ 1] = 0x30303030; /*EP(R30)*/  
  ptr[ 2] = 0x29292929; /*R29*/  
  ptr[ 3] = 0x28282828; /*R28*/  
  ptr[ 4] = 0x27272727; /*R27*/  
  ptr[ 5] = 0x26262626; /*R26*/  
  ptr[ 6] = 0x25252525; /*R25*/  
  ptr[ 7] = 0x24242424; /*R24*/  
  ptr[ 8] = 0x23232323; /*R23*/  
  ptr[ 9] = 0x22222222; /*R22*/  
  ptr[10] = 0x21212121; /*R21*/  
  ptr[11] = 0x20202020; /*R20*/  
  tcb[tid].exinf[0] = exinf1;  
  tcb[tid].exinf[1] = exinf2;  
  tcb[tid].exinf[2] = exinf3;  
  tcb[tid].exinf[3] = exinf4;  
  tcb[tid].rdy_flg = TTS_DMT;  
  return E_OK;  
 }