2026
2025
2024
2023
2022
2021
2020
全2件 (2件中 1-2件目)
1
PSoCのUARTを使用していますが電源投入後0xFFが出てしまいます、リセット後も同じです、何かいい方法ないのかなぁ~。この現象はハイパーターミナルでは見れません、RS232Cラインモニターなどで見れます。使用しているRS232Cラインモニターは秋月の [K-00045] AKI-RS232Cラインモニターキットです。
2006年12月19日
コメント(1)
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 Interruptunsigned int uart1_rxint_count; //UART_1_RX interrupt counterunsigned char recv_data[50]; //recv dataunsigned char sumcrc_data[2]; //SUM CRC DATAmain{ 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日
コメント(7)
全2件 (2件中 1-2件目)
1
![]()

