ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
182481 Топик полностью
koyodza (22.02.2010 10:36 - 10:51, просмотров: 336) ответил sbb на По даташиту для STM32 "I/Os on APB2 with up to 18 MHz toggling speed".
измерил на STM32F103 условия измерений: SYSCLK = HCLK = PCLK2 = 72MHz дискретность измерений - 5 нсек while (1) { TEST0_GPIO->BRR = TEST0_PIN; TEST0_GPIO->BSRR = TEST0_PIN; } 0x0800032E 6148 STR r0,[r1,#0x14] 197: TEST0_GPIO->BSRR = TEST0_PIN; 0x08000330 6108 STR r0,[r1,#0x10] 194: while (1) 0x08000332 E7FC B 0x0800032E измеренная частота = 8.000 МГц измеренная длительность лог.0 - 40нсек, лог.1 - 85нсек неравномерность визуально не замечена, имеется дрожание фронтов +/-5нсек, связанное с дискретностью измерений можно сказать, что все три команды выполняются за 3 такта каждая while (1) { TEST0_GPIO->BRR = TEST0_PIN; TEST0_GPIO->BSRR = TEST0_PIN; TEST0_GPIO->BRR = TEST0_PIN; TEST0_GPIO->BSRR = TEST0_PIN; TEST0_GPIO->BRR = TEST0_PIN; TEST0_GPIO->BSRR = TEST0_PIN; TEST0_GPIO->BRR = TEST0_PIN; TEST0_GPIO->BSRR = TEST0_PIN; } 0x0800032E 6148 STR r0,[r1,#0x14] 197: TEST0_GPIO->BSRR = TEST0_PIN; 0x08000330 6108 STR r0,[r1,#0x10] 198: TEST0_GPIO->BRR = TEST0_PIN; 0x08000332 6148 STR r0,[r1,#0x14] 199: TEST0_GPIO->BSRR = TEST0_PIN; 0x08000334 6108 STR r0,[r1,#0x10] 200: TEST0_GPIO->BRR = TEST0_PIN; 0x08000336 6148 STR r0,[r1,#0x14] 201: TEST0_GPIO->BSRR = TEST0_PIN; 0x08000338 6108 STR r0,[r1,#0x10] 202: TEST0_GPIO->BRR = TEST0_PIN; 0x0800033A 6148 STR r0,[r1,#0x14] 203: TEST0_GPIO->BSRR = TEST0_PIN; 0x0800033C 6108 STR r0,[r1,#0x10] 194: while (1) 0x0800033E E7F6 B 0x0800032E вот здесь интереснее: измеренная частота 14.400 МГц последовательность показана на картинке (в масштабах 50нсек/дел и 20 нсек/дел) и имеет такие длительности: лог.1 - 25 нсек, лог.0 - 30 нсек, лог.1 - 25 нсек, лог.0 - 30 нсек, лог.1 - 25 нсек, лог.0 - 30 нсек, лог.1 - 70 нсек, лог.0 - 40 нсек, с учётом дискретности измерений (дрожание фронтов) +/-5нсек имеем: лог.1 - 2 такта, лог.0 - 2 такта, лог.1 - 2 такта, лог.0 - 2 такта, лог.1 - 2 такта, лог.0 - 2 такта, лог.1 - 5 тактов, лог.0 - 3 такта, всего 20 тактов Здесь получается что запись в порт выполняется за 2 такта, а переход и последующая запись - за 3 такта. Так что указанные Вами 2 такта имеют место только в определённых условиях, реально время несколько больше
image