> これだけではだめです。マニュアルの頁10-47に示される手
順
> で該当するレジスタを全て設定してください。
プログラムをまた作りました。ここにまた載せたいと思います
。
#include <3048f.h>
#include <machine.h>
#pragma interrupt(intimia1)
extern unsigned int cnt0; /* 信号のHighの時間を記憶 */
void main(void)
{
cnt0 = 0; /* cnt0初期化 */
PA.DDR = 0x00; /* Port-Aは入力設定 */
PB.DDR = 0xff; /* Port-Bは出力設定 */
ITU.TSTR.BYTE = 0x00; /* ひとまず全タイマー停止 */
ITU.TSNC.BYTE = 0x00; /* 全タイマーは独立動作 */
ITU.TMDR.BYTE = 0x00; /* ITUはすべて通常動作 */
ITU.TFCR.BYTE = 0x00; /* ITU3,4およびGRA3,4,GRB3,4
は通常動作 */
ITU.TOER.BYTE = 0x00; /* ITU3,4による端子出力は
禁止 */
ITU.TOCR.BYTE = 0xff; /* 外部トリガ禁止 */
ITU1.TCR.BYTE = 0x83; /*
クロックの1/8で動作。TCNT
のクリア禁止 */
ITU1.TIOR.BYTE = 0xdf; /* 両エッジでGRAへインフ
゜ットキャプチャ */
ITU1.TIER.BYTE = 0x03; /* IMFA,IMFBによる割り込
み許可 OVIE禁止 */
ITU1.TSR.BYTE = 0x00; /* 全割り込みフラグクリア
*/
ITU1.TCNT = 0x00; /* カウントクリア */
ITU1.GRA = 0; /* GRA初期値設定 */
set_imask_ccr(0); /* 割り込みマスクビットを
クリアします。*/
ITU.TSTR.BIT.STR1 = 1; /* ITU1スタート */
ITU.TMDR.BIT.PWM0 = 1; /* ITU0 PWMモード */
ITU0.TCR.BYTE = 0x23; /* クロックの1/8で動作。GRA
コンペアマッチ */
ITU0.GRA = cnt0; /* GRAの値はcnt0 */
ITU.TSTR.BIT.STR0 = 0; /* カウント停止状態 */
ITU.TSTR.BIT.STR0 = 0; /* ITU0スタート */
while(1){
PB.DR.BYTE=PA.DR.BYTE;
}
void intimia1(void){
if(PA.DR.BIT.B4){ /*
立ち上がりエッジの場合 */
ITU1.TCNT = 0x00; /* カウントをクリア */
}
else{
/* 立ち下がりエッジの場合 */
cnt0 = ITU1.GRA; /* 値をcnt0に記憶 */
}
ITU1.TSR.BIT.IMFA=0; /* 割り込みフラグ解除 */
}
色々ご指摘を頂きましたが、ITU1へADXLの出力をインプットし
、PWMモードにしたITU0でそれを出力。パルス幅はcnt0という
ようにしています。メイン関数ではITU0の設定が全て終わった
時点でITU1の設定をしました。
このプログラムで果たして出力をパルス幅で出せるのでしょう
か?またご指摘お願いします。
__________________________________________________
Do You Yahoo!?
Yahoo! BB is Broadband by Yahoo!
http://bb.yahoo.co.jp/