при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
In case of simultaneous accesses to the same memory area both in execution stage (write)ARV писал(а):то есть вы хотите сказать, что 8-битный МК работает с памятью 16-битными словами, и в процессе обмена байтами прерывания не могут произойти? я верно понимаю архитектуру STM8?
Ну так и делать — по фронту забирать данные.baghear писал(а):как сделать.
по фронту выдаются данные.
Дак напишите. Почему всё вытягивать нужно из людейbaghear писал(а):Не писал что не получается
Вот теперь попробуйте ответить мне на мой вопрос.У меня есть в огороде яблоня. По каждому стуку по ней, яблоки падают по одному.
Подскажите, как сохранить эти яблоки ?
Не находите ничего общего с моим ?Добрый день, есть 24 битное АЦП которое выдаёт один бит по каждому возростающему фронту.
Подскажите как сохранить эти данные.
Принип приблизительно такой, тонкости по ситуации:baghear писал(а):Приведите пожалуйста пример кода на си.
Код: Выделить всё
#define DDR_ADC DDRD
#define PIN_ADC PIND
#define PORT_ADC PORTD
#define ADC_PIN (1<<PD2) // Последовательный выход АЦП
#define ADC_CLK (1<<PD1) // Вывод тактирования АЦП
int main() {
...
DDR_ADC |= ADC_CLK; // Этот пин МК будет выходом (организовывать тактирование с периодом, например, 10 мкс)
DDR_ADC &= ~ADC_PIN; // Этот пин МК будет входом (принимать данные с выхода АЦП)
...
}
uint32_t adcResult()
{
uint8_t i;
uint32_t adcValue = 0;
for (i = 0; i < 24; i++) {
_delay_us(5);
PORT_ADC |= ADC_CLK;
if (PIN_ADC & ADC_PIN) {
adcValue |= 0x01;
}
if (i != 23)
adcValue <<= 1;
_delay_us(5);
PORT_ADC &= ~ADC_CLK;
}
return adcResult;
}
Код: Выделить всё
uint32_t var = 0x12345678;
UartTransmitHexLong (var & (0x0000ffff << 16));Код: Выделить всё
uint32_t var = 0x12345678;
UartTransmitHexLong (var & (0xffffUL << 16));А точнее - константы 0x0000FFFF...ARV писал(а):в первом случае у вас не со сдвигом была проблема, а с начальным присваиванием константы 0x12345678.
Интересно, а чем продиктован такой подход?ARV писал(а):все числовые константы, если явно не указан их тип, имеют размерность int. поэтому даже число 0x23498579834759823476982347982347 все равно будет типа int.
Ан нет... именно в случае со сдвигом проблема проявляется...ARV писал(а):в первом случае у вас не со сдвигом была проблема, а с начальным присваиванием константы 0x12345678.
Код: Выделить всё
uint32_t temp = 0x12345678;
UartTransmitHexLong (temp & 0xffff0000);