//----------------------------------------------- void UART_IN(void) { //static char flag; char temp,i,count,index; //int temp_int; di(); count=rx_counter; index=rx_wr_index; ei(); if(count&&(rx_buffer[index_offset(index,-1)])==END) { temp=rx_buffer[index_offset(index,-3)]; if(temp<10) { if(control_check(index_offset(index,-1))) { rx_rd_index=index_offset(index,-3-temp); for(i=0;i<temp;i++) { UIB[i]=rx_buffer[index_offset(rx_rd_index,i)]; } rx_rd_index=index; rx_counter-=count; UART_IN_AN(); } } } //UART_IN_end: //ei(); }
//----------------------------------------------- char control_check(char index) { char i=0,ii=0,iii; if(rx_buffer[index]!=END) goto error_cc; ii=rx_buffer[index_offset(index,-2)]; iii=0; for(i=0;i<=ii;i++) { iii^=rx_buffer[index_offset(index,-2-ii+i)]; } if (iii!=rx_buffer[index_offset(index,-1)]) goto error_cc; success_cc: return 1; goto end_cc; error_cc: return 0; goto end_cc; end_cc: asm("nop"); }
//----------------------------------------------- void uart_in(void) { char temp,i,count; //#asm("cli") //disableInterrupts(); if(rx_buffer_overflow) { rx_wr_index=0; rx_rd_index=0; rx_counter=0; rx_buffer_overflow=0; } if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END) { //rx_offset++; //GPIOD->ODR^=(1<<4); //uart_out (3,CMND,1,33,mdr1/**(((char*)&temp_L)+1)*/,mdr2/**(((char*)&temp_L)+2)*/,mdr3/**(((char*)&temp_L)+3)*/); temp=rx_buffer[index_offset(rx_wr_index,-3)]; if(temp<100) { if(control_check(index_offset(rx_wr_index,-1))) {///uart_out (3,CMND,1,33,mdr1/**(((char*)&temp_L)+1)*/,mdr2/**(((char*)&temp_L)+2)*/,mdr3/**(((char*)&temp_L)+3)*/); //GPIOD->ODR^=(1<<4); rx_rd_index=index_offset(rx_wr_index,-3-temp); for(i=0;i<temp;i++) { UIB[i]=rx_buffer[index_offset(rx_rd_index,i)]; } rx_rd_index=rx_wr_index; rx_counter=0; /*if(UIB[1]==21) { char i; for(i=0;i<64;i++) { UIB[2+i]=rx_offset; } }*/ uart_in_an(); /**/ } } } //#asm("sei") //enableInterrupts(); }
//----------------------------------------------- char control_check(char index) { char i=0,ii=0,iii; if(rx_buffer[index]!=END) return 0; ii=rx_buffer[index_offset(index,-2)]; iii=0; for(i=0;i<=ii;i++) { iii^=rx_buffer[index_offset(index,-2-ii+i)]; } if (iii!=rx_buffer[index_offset(index,-1)]) return 0; return 1; }
//----------------------------------------------- char control_check(char index) { char i=0,ii=0,iii; if(rx_buffer[index]!=END) goto error_cc; //else OUT(0x0b,0,0,0,0,0); ii=rx_buffer[index_offset(index,-2)]; iii=0; for(i=0;i<=ii;i++) { iii^=rx_buffer[index_offset(index,-2-ii+i)]; } if (iii!=rx_buffer[index_offset(index,-1)]) goto error_cc; success_cc: return 1; goto end_cc; error_cc: return 0; goto end_cc; end_cc: } //----------------------------------------------- void UART_IN_AN(void) { char temp_char; int temp_int; signed long int temp_intL; if(UIB[0]==CMND) { ccc1=UIB[1]; ccc2=UIB[2]; ccc3=UIB[3]; } }
@far @interrupt void UARTTxInterrupt (void) { #else void UARTTxInterrupt (void) interrupt 17 { #endif #ifdef _wrk_ if (tx_counter){ --tx_counter; UART1->DR=tx_buffer[tx_rd_index]; if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; } else { bOUT_FREE=1; UART1->CR2&= ~UART1_CR2_TIEN; } #endif } /* //----------------------------------------------- char control_check(char index) { char i=0,ii=0,iii; if(rx_buffer[index]!=END) goto error_cc; ii=rx_buffer[index_offset(index,-2)]; iii=0; for(i=0;i<=ii;i++) { iii^=rx_buffer[index_offset(index,-2-ii+i)]; } if (iii!=rx_buffer[index_offset(index,-1)]) goto error_cc; success_cc: return 1; //goto end_cc; error_cc: return 0; //goto end_cc; //end_cc: //return 0; } //----------------------------------------------- char index_offset (signed char index,signed char offset) { index=index+offset; if(index>=RX_BUFFER_SIZE) index-=RX_BUFFER_SIZE; if(index<0) index+=RX_BUFFER_SIZE; return index; } */ #ifdef _wrk_ //----------------------------------------------- void uart_in(void) { char temp,i,count; //#asm("cli") disableInterrupts(); if(rx_buffer_overflow) { rx_wr_index=0; rx_rd_index=0; rx_counter=0; rx_buffer_overflow=0; } if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END) { //GPIOD->ODR^=(1<<4); temp=rx_buffer[index_offset(rx_wr_index,-3)]; if(temp<100) { if(control_check(index_offset(rx_wr_index,-1))) { //GPIOD->ODR^=(1<<4); rx_rd_index=index_offset(rx_wr_index,-3-temp); for(i=0;i<temp;i++) { UIB[i]=rx_buffer[index_offset(rx_rd_index,i)]; } rx_rd_index=rx_wr_index; rx_counter=0; uart_in_an(); /**/ } } } //#asm("sei") enableInterrupts(); }
//----------------------------------------------- void UART_IN(void) { //static char flag; char temp,i,count; //int temp_int; #asm("cli") //char* ptr; //char i=0,t=0; //int it=0; //signed long int char_int; //if(!bRXIN) goto UART_IN_end; //bRXIN=0; //count=rx_counter; //OUT(0x01,0,0,0,0,0); if(rx_buffer_overflow) { rx_wr_index=0; rx_rd_index=0; rx_counter=0; rx_buffer_overflow=0; } if(rx_counter&&(rx_buffer[index_offset(rx_wr_index,-1)])==END) { temp=rx_buffer[index_offset(rx_wr_index,-3)]; if(temp<10) { if(control_check(index_offset(rx_wr_index,-1))) { rx_rd_index=index_offset(rx_wr_index,-3-temp); for(i=0;i<temp;i++) { UIB[i]=rx_buffer[index_offset(rx_rd_index,i)]; } rx_rd_index=rx_wr_index; rx_counter=0; UART_IN_AN(); } } } UART_IN_end: #asm("sei") } //----------------------------------------------- void OUT (char num,char data0,char data1,char data2,char data3,char data4,char data5) { char i,t=0; char UOB[10]; UOB[0]=data0; UOB[1]=data1; UOB[2]=data2; UOB[3]=data3; UOB[4]=data4; UOB[5]=data5; UOB[6]=0; UOB[7]=0; UOB[8]=0; UOB[9]=0; for (i=0;i<num;i++) { t^=UOB[i]; } UOB[num]=num; t^=UOB[num]; UOB[num+1]=t; UOB[num+2]=END; for (i=0;i<num+3;i++) { putchar(UOB[i]); } }
void set_index(jint val) { int_field_put(index_offset(),val); }
jint index() { return int_field(index_offset()); }