void FlashReadArray(unsigned long address, unsigned char *buffer, unsigned char length) { unsigned char ch; unsigned int addr = 0; unsigned int page = 0; page = address/264; addr = address%264; page<<=1; FlashEnable(); // Send READ opcode WriteByte(CONTINUOUS_ARRAY_READ); // 24 bit page and address WriteByte((*((unsigned char*)&page+1))); WriteByte((((unsigned char)page&0xFE)|(*((unsigned char*)&addr+1) & 0x01))); WriteByte((unsigned char)addr); // 32 don't care bits WriteByte(0x00); WriteByte(0x00); WriteByte(0x00); WriteByte(0x00); while(length--) { ch = WriteByte(0x0); *buffer++ = ch; write_str_USART0("\n\r\t Read -> "); write_char_USART0(ch+48); }; FlashDisable(); }
void write_report_USART0(void) { if(print_view == PRINT_COORDINATES) { tmp_x = Coordinates[0]/NSAMPLE; tmp_y = Coordinates[1]/NSAMPLE; tmp_z = Coordinates[2]/NSAMPLE; } else { tmp_x = base_x - (Coordinates[0]/NSAMPLE); tmp_y = base_y - (Coordinates[1]/NSAMPLE); tmp_z = base_z - (Coordinates[2]/NSAMPLE); } // X if(print_view == PRINT_DIVERSION) { write_str_USART0(" dX: "); if(tmp_x<0) { tmp_x = (tmp_x)*(-1); write_char_USART0('-'); } } else { write_str_USART0("\rX: "); } num_1 = (tmp_x%10); num_2 = (tmp_x%100 - num_1)/10; num_3 = (tmp_x%1000 - num_2)/100; num_4 = (tmp_x%10000 - num_3)/1000; write_char_USART0(num_4+48); write_char_USART0(num_3+48); write_char_USART0(num_2+48); write_char_USART0(num_1+48); // X if(print_view == PRINT_DIVERSION) { write_str_USART0(" dY: "); if(tmp_y<0) { tmp_y = (tmp_y)*(-1); write_char_USART0('-'); } } else { write_str_USART0(" Y: "); } num_1 = (tmp_y%10); num_2 = (tmp_y%100 - num_1)/10; num_3 = (tmp_y%1000 - num_2)/100; num_4 = (tmp_y%10000 - num_3)/1000; write_char_USART0(num_4+48); write_char_USART0(num_3+48); write_char_USART0(num_2+48); write_char_USART0(num_1+48); // Z if(print_view == PRINT_DIVERSION) { write_str_USART0(" dZ: "); if(tmp_z<0) { tmp_z = (tmp_z)*(-1); write_char_USART0('-'); } } else { write_str_USART0(" Z: "); } num_1 = (tmp_z%10); num_2 = (tmp_z%100 - num_1)/10; num_3 = (tmp_z%1000 - num_2)/100; num_4 = (tmp_z%10000 - num_3)/1000; write_char_USART0(num_4+48); write_char_USART0(num_3+48); write_char_USART0(num_2+48); write_char_USART0(num_1+48); }
//начало основной программы void main(void) { CPUinit(); //инициализация системы timer_init(); //инициализация таймеров-счетчиков LCDinit_clear(); //нач инициализация и сброс ЖКИ InitUSART0(115200); //инициализация USART0 со скоростью обмена 115200 кбит/с // Вывод на ЖКИ начальной заставки lcd_pro_data('U', 0); lcd_tek_data('S'); lcd_tek_data('A'); lcd_tek_data('R'); lcd_tek_data('T'); lcd_tek_data('_'); lcd_tek_data('F'); lcd_tek_data('L'); lcd_tek_data('A'); lcd_tek_data('S'); lcd_tek_data('H'); //начало основного цикла for (;;) { if (flagn_kn1==1) // нажималась ли кнопка 1 { flagn_kn1=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED1 if (led1_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED1); // зажечь сетодиод 1 led1_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED1); // погасить светодиод 1 led1_old_state=OFF; } //выбор значения для передачи в USART ch0++; if (ch0 == 'z') ch0 = '!'; lcd_pro_data(ch0, 64); //индикация символа, подлежащего передаче } if (flagn_kn2==1) // нажималась ли кнопка 2 { flagn_kn2=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED2 if (led2_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED2); // зажечь сетодиод 2 led2_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED2); // погасить светодиод 2 led2_old_state=OFF; } write_char_USART0(ch0); //передача символа через USART0 lcd_pro_data(ch0, 66); //индикация переданного символа } if (flagn_kn3==1) // нажималась ли кнопка 3 { flagn_kn3=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED3 if (led3_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED3); // зажечь сетодиод 3 led3_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED3); // погасить светодиод 3 led3_old_state=OFF; } write_str_USART0(stroka); //передача в USART0 строки данных //индикация переданной строки U8 i = 0x0; while(stroka[i] != '\0') { lcd_pro_data(stroka[i], 68+i); //индикация переданного символа строки i++; } } if (flagn_kn4==1) // нажималась ли кнопка 4 { flagn_kn4=0; //да, сбросить флаг нажатия //смена состояния выхода светодиода LED4 if (led4_old_state==OFF) { AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, LED4); // зажечь сетодиод 4 led4_old_state=ON; } else { AT91F_PIO_SetOutput( AT91C_BASE_PIOA, LED4); // погасить светодиод 4 led4_old_state=OFF; } lcd_clear(); //очистка ЖКИ } } }