ブログを作る※無料・簡単アフィリ    ブログトップ | 楽天市場
096931 ランダム
PSoC UART Binary 受信割り込み… (趣味・ゲーム)楽天ブログ 【ケータイで見る】 【ログイン】
趣味の電子工作研究工房
ホーム 日記 プロフィール オークション 掲示板 ブックマーク お買い物一覧

PR

カレンダー

2011年11月
  12345
6789101112
13141516171819
20212223242526
27282930   
<一覧へ今月次の月>

キーワードサーチ

お気に入りブログ

マイクロマウス目… New!CPU4Eduさん

時代遅れのアナロ… さくら もものこ さん
電子こうさくの家 PIC9801 さん

バックナンバー

モバイル

>>ケータイに
このブログの
URLを送信!

 

e-deviceの日記

<< 前へ次へ >>一覧コメントを書く

2006年12月08日 楽天プロフィール Add to Google XML

PSoC UART Binary 受信割り込み
[ カテゴリ未分類 ]    

PSoCのUARTは受信割り込みの許可 UART_1_IntCntl(UART_1X_INT); //Enable RX interrupts を行うとバイナリーの受信割り込みができないんです。

UART_1_bCmdLength() で受信数を得て UART_1_szGetParam()で受信数分データを得ることができます。そして UART_1_CmdReset()で初期の状態にし再度この方法で繰り返すと受信内容のデータが間違っています。だからバイナリーの受信は割り込み許可で割り込みの受信ができないんです。なんとか良い方法はないかと思い受信割り込みをC言語だけで処理することにしました。

#include <m8c.h>        //part specific constants and macros
#include "PSoCAPI.h"    //PSoC API definitions for all User Modules
#include <string.h>
#include <stdlib.h>

//ここを付け加えます。(受信割り込みをC言語で行う)

#pragma interrupt_handler int_uart1_rx //UART_1_RX Interrupt

unsigned int uart1_rxint_count; //UART_1_RX interrupt counter

unsigned char recv_data[50]; //recv data

unsigned char sumcrc_data[2]; //SUM CRC DATA

main

{

    UART_1_CmdReset();                    //Initialize receiver/cmd buf.
    UART_1_IntCntl(UART_1_ENABLE_RX_INT);  //Enable RX interrupts
    UART_1_Start(UART_1_PARITY_NONE);       //Enable UART

    int_recv_test(); //UART 1 RX Interrupt test
 }

//-----------------------------------------------------------
void int_recv_test(void) //UART 1 RX Interrupt test
{
 unsigned int c;
 unsigned char *send_buf;

Loop1: 
 if(uart1_rxint_count == 10){  //UART_1_RX interrupt counter
  uart1_rxint_count = 0;   //UART_1_RX interrupt counter
  send_buf = &recv_data[0];
  for(c=0; c<10; c++){
   UART_1_SendData( *(send_buf + c) );
   while( !( UART_1_bReadTxStatus() & UART_1_TX_BUFFER_EMPTY ) ); //send end loop
  }
  UART_1_PutCRLF();
 }
 else{
  goto Loop1;
 }
}

//-------------------------------------------------------

boot.asm の受信割り込みの内容を書き換える

    org   2Ch                      ;PSoC Block DCB03 Interrupt Vector
    ljmp _int_uart1_rx     ;UART_1_RX Interrupt
    //ljmp _UART_1_RX_ISR
    reti

初期時のエラー解決を完了すれば割り込みのバイナリー受信は解決できます。もしエラーが起こってもSUM チェックやCRCチェックで受信ミスがわかりますので問題ないとおもいます。私はSUMチェックを使用しています。

//-----------------------------------------------------------------------
void sum_check(int kazu,unsigned char *adress) //SUM CHECK
{
unsigned int c;
unsigned int i;
unsigned int va;
unsigned int vz;

 va = 0;
 for(c = 0; c < kazu; c++){
  va = va + *(adress + (c)); //
 }
 vz = va & 0xFF00;
 vz = vz >> 8;
 sumcrc_data[0] = vz;   //MSB
 sumcrc_data[1] = va & 0x00FF; //LSB
}

//----------------------------------------------------------------------
void crc_check(int kazu,unsigned char *adress) //CRC CHECK
{
unsigned int c;
unsigned int i;
unsigned int ia;
unsigned int va;
unsigned int vd;
unsigned int vc;
unsigned int vz;

 vd = 0xFFFF;
 for(c = 0; c < kazu; c++){
  vc = *(adress + (c));  //
  vd = vd ^ vc;    //
  for(ia=0; ia < 8; ia++){
   vz = vd & 0x0001;  //0 Bit
   if(vz == 1){
    vd = vd >> 1;
    vd = vd ^ 0xA001; //EXOR
   }
   else{
    vd = vd >> 1;
   }
  }
 }
 sumcrc_data[0] = (vd/256);  //MSB
 sumcrc_data[1] = vd & 0x00FF; //LSB
}

 

 




最終更新日  2006年12月08日 22時36分40秒
コメント(7) | コメントを書く




■コメント

お名前
タイトル
メッセージ
・メッセージ本文は全角で800文字までです。
・書き込みに際しては楽天ブログ規約の禁止事項や免責事項をご確認ください
・ページの設定によっては、プルダウンで「顔選択」を行っても、アイコンが表示されません。ご了承ください。


バイナリ受信割込み   K.Iさん


詳しく知りたい^^;   PIC9801さん


Re:バイナリ受信割込み(12/08)   e-deviceさん


Re:詳しく知りたい^^;(12/08)   e-deviceさん


Re[1]:バイナリ受信割込み(12/08)   K.Iさん


Re[2]:バイナリ受信割込み(12/08)   e-deviceさん


Re[3]:バイナリ受信割込み(12/08)   K.Iさん


<< 前へ次へ >>一覧コメントを書く一番上に戻る


Powered By 楽天ブログは国内最大級の無料ブログサービスです。楽天・Infoseekと連動した豊富なコンテンツや簡単アフィリエイト機能、フォトアルバムも使えます。デザインも豊富・簡単カスタマイズが可能!

Copyright (c) 1997-2012 Rakuten, Inc. All Rights Reserved.