ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
17 мая
149591 Топик полностью
Argon (28.02.2009 17:15, просмотров: 156) ответил yakuzaa на а можно еще процедуру SCI_write посмотреть, пожалуйста?
Прога основана на scmRTOS, для отправки SDI и SCI данных служат разные процессы.  OS_PROCESS void TSCI_Process::Exec() { byte SCI_operation; byte SCI_register; SCIBuffer.clear(); for(;;) { SCI_flag.Wait(); while(SCIBuffer.get_count()) { VS1033_Mutex.Lock(); SCI_operation = SCIBuffer.get(); SCI_register = SCIBuffer.get(); VS1033_XCS_LOW(); SPI_Write_Read(SCI_operation); SPI_Write_Read(SCI_register); if(SCI_operation == WRITE_OP) { SPI_Write_Read(SCIBuffer.get()); SPI_Write_Read(SCIBuffer.get()); } if(SCI_operation == READ_OP) { SCI_Register_Content = SPI_Write_Read(0xff); SCI_Register_Content = (SCI_Register_Content << 8) | SPI_Write_Read(0xff); SCI_Read_flag.Signal(); } Sleep(SCI_Delay_table[SCI_register]); //задержка, приблизительно равная данной в даташите, параграф 8.7 VS1033_XCS_HIGH(); VS1033_Mutex.Unlock(); Sleep(50); //минимальный интервал между SCI-командами. } } } void SCI_Write(byte sci_register, word data) { while(SCIBuffer.get_count()) General_Delay.Wait(10); //ожидание освобождения буфера SCI SCIBuffer.put(WRITE_OP); SCIBuffer.put(sci_register); SCIBuffer.put(data>>8); SCIBuffer.put(data&0xff); SCI_flag.Signal(); //всегда д.б. до SCI_SDI_flag.Signal }