トップ «前の日記(2003年06月13日) 最新 次の日記(2003年06月17日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2003年06月16日 また雨(梅雨だしなぁ)

[Linuxカーネルハック]

デバドラ(カーネル空間コード)の中で割り禁にする自分用ちょいメモ
#include <linux/interrupt.h>
 
unsigned long flags;
        save_flags(flags);
        cli();
        くりちかるなコード
        restore_flags(flags);
cli() 〜 sti() としてはだめ。割り禁にする前がどうなってたか不明なのに割り込みokにしてしまうから。

[CAT709]

CAT709はCPUクロックが外部バス58MHzの2倍速の117MHz動作の設計なのだが、無理無理に3倍速の176MHzにしてしまうドライバを作ってみた。名付けて turbo709.c だ。もちろん無保証・CPUが焼けるかもしれない。試したところ基板によってばらつきがあり、不安定になる基盤と安定動作する基板があった。規格外なのだから当然だ。不安定な基板が根性なしなわけではない。オーバークロックは自己責任で。
#define __KERNEL__
#define MODULE
 
#include <linux/module.h>
#include <linux/interrupt.h>
#include <asm/io.h>
 
#define WTSCR_A  0xffffff86
#define WTCNT_A  0xffffff84
#define FRQCR_A  0xFFFFFF80
 
#define TMU_TOCR_INIT   0x00
#define TMU0_TCR_INIT   0x0021   /* 2002-4-14 Y.Ebihara, it was 0x0020 */
#define TMU_TSTR_INIT   1
#define TMU_TOCR        0xfffffe90      /* Byte access */
#define TMU_TSTR        0xfffffe92      /* Byte access */
 
#define TMU0_TCOR       0xfffffe94      /* Long access */
#define TMU0_TCNT       0xfffffe98      /* Long access */
#define TMU0_TCR        0xfffffe9c      /* Word access */
 
#define FRQCR_D  0xa101
#define FRQCR_D_NORMAL  0x0112
 
#define INTERVAL 18430
 
/*
FRQCR DATA
                  PLL1 IFC PFC
        0x0112 ... x2  /1  /4   CPU=117.9MHz original / good
        0xa101     x3  /1  /6   CPU=176MHz  / good
        0xa105 ... x3  /2  /6   CPU=88.4MHz / bad
        0xe101 ... x3  /3  /6   CPU=58.9MHz / bad
        0x0116 ... x2  /2  /4   CPU=58.9MHz / bad
*/
 
void restart_tmu(){
        /* Start TMU0 */
        ctrl_outb(0, TMU_TSTR);
        ctrl_outb(TMU_TOCR_INIT, TMU_TOCR);
        ctrl_outw(TMU0_TCR_INIT, TMU0_TCR);
        ctrl_outl(INTERVAL, TMU0_TCOR);
        ctrl_outl(INTERVAL, TMU0_TCNT);
        ctrl_outb(TMU_TSTR_INIT, TMU_TSTR);
}
 
int init_module(){
unsigned long flags;
        save_flags(flags);
        cli();
        ctrl_outw(0x5a47,WTSCR_A);
        ctrl_outw(0x5af0,WTCNT_A);
        ctrl_outw(FRQCR_D,FRQCR_A);
        restore_flags(flags);
 
        restart_tmu();
        return 0;
}
 
void cleanup_module(){
unsigned long flags;
        save_flags(flags);
        cli();
        ctrl_outw(0x5a47,WTSCR_A);
        ctrl_outw(0x5af0,WTCNT_A);
        ctrl_outw(FRQCR_D_NORMAL,FRQCR_A);
        restore_flags(flags);
        restart_tmu();
}
 
MODULE_LICENSE("GPL");
わかる人は見てわかると思うけど insmod すると176MHzになり、rmmod すると元に戻る。上のコードをCAT709自身でコンパイルしたとき、の差は下くらいだった。最低限デバイスドライバのコンパイルや実行方法がわかる人向け。
のーまるたーぼ
real 0m2.201s
user 0m1.870s
sys 0m0.260s
real 0m1.711s
user 0m1.420s
sys 0m0.220s

[CAT709]

CAT709(EB709)を組み込んだ実製品の1号機。昨日出来上がったばかりです。工作機械の監視装置です。お客さんに写真の掲載許可をもらったので写真を載せます。パトライトの下にEB709が見えます。PLCも組み込んでいます。

[CAT709]

こちらはデモ用に作ろうと思ったブツで、コネクタを半田付けしたところで疲れ果てた。今日はおしまい