Интересует технический вопрос: Как это делается ?
можно ли непосредственно в сишный код вставлять? если можно то как?
если нельзя то как это оформить?
В конце концов, посодействуйте авторитетной ссылочкой
Код: Выделить всё
void
_delay_loop_1(uint8_t __count)
{
__asm__ volatile (
"1: dec %0" "\n\t"
"brne 1b"
: "=r" (__count)
: "0" (__count)
);
}
Так вот откуда ноги растут ...FPGAlover писал(а):И еще раз здравствуйте! Вот и добрался я до своего любимого ассемблера![]()
ну это понятно. Больше быстродействие интересует.balmer писал(а):Память, как на дешевых AVR смысла нет экономить
Код: Выделить всё
for (j=0;j<256;j++) {
GPIOB->BSRRL |= 1<<12;
for (i=0;i<1;i++){};
buff[j] = GPIOB->ODR;
GPIOB->BSRRH |= 1<<12;
}
Код: Выделить всё
for (int j=0;j<256;j++)
{
GPIOB->BSRR = 1<<12;
for (int i=0;i<1;i++){};
buff[j] = GPIOB->ODR;
GPIOB->BRR = 1<<12;
}
Код: Выделить всё
79 0020 4FF48051 mov r1, #4096
80 0024 074A ldr r2, .L9
82 0026 0848 ldr r0, .L9+4
85 0028 30B5 push {r4, r5, lr}
92 002a 0023 movs r3, #0
95 002c 0D46 mov r5, r1
97 .L7:
98 002e 9561 str r5, [r2, #24]
101 0030 948A ldrh r4, [r2, #20]
102 0032 E4B2 uxtb r4, r4
103 0034 C454 strb r4, [r0, r3]
105 0036 0133 adds r3, r3, #1
107 0038 B3F5807F cmp r3, #256
109 003c 1185 strh r1, [r2, #40] @ movhi
111 003e F6D1 bne .L7
Конечно не прав. GPIO та же периферия . Конечно при работе с DMA много не выжмешь , зато будет аппаратно...coredumped писал(а):Скажем, DMA с внешним "параллельным" АЦП связать не просто - единственный вариант FSMC (поправьте меня, если я не прав).
Код: Выделить всё
buff[j] = GPIOB->ODR;
Предельно понятноdosikus писал(а):А вот почему буфер читается с ODR а не с IDR так же не понятно
Ну да, ну да... А строб данных как сформировать (шина данных 16-битная)? Варианты?dosikus писал(а):Конечно не прав. GPIO та же периферия . Конечно при работе с DMA много не выжмешь , зато будет аппаратно...
Код: Выделить всё
uint16_t buff[256];
uint32_t i = 0;
uint32_t* SetReg ;
uint32_t* ResetReg ;
uint32_t* DataReg ;
SetReg = (uint32_t*)&GPIOB->BSRRL;
ResetReg = (uint32_t*)&GPIOB->BSRRH;
DataReg = (uint32_t*)&GPIOB->IDR;
while(1){
uint32_t j=0;
do {
*SetReg = 1<<12; //set bit
i=0; //пауза.. АЦП быстродействующее, вполне хватает
buff[j++] = *DataReg;
*ResetReg = 1<<12; //set bit
} while (j<256);
Код: Выделить всё
uint16_t buff[256];
uint32_t i = 0;
uint32_t* SetReg ;
uint32_t* ResetReg ;
uint32_t* DataReg ;
uint16_t *bp;
bp = buff;
SetReg = (uint32_t*)&GPIOB->BSRRL;
ResetReg = (uint32_t*)&GPIOB->BSRRH;
DataReg = (uint32_t*)&GPIOB->ODR;
while(1){
uint32_t j=256;
*SetReg = 1<<12; //set bit
do {
*(bp++) = *DataReg;
*ResetReg = 1<<12; //set bit
*SetReg = 1<<12; //set bit
} while (j--);Тем же DMA , посмотри на казусе мою реализацию с LED дисплеем .coredumped писал(а): Ну да, ну да... А строб данных как сформировать (шина данных 16-битная)? Варианты?
почему то в хардфаулт уходит...coredumped писал(а):Попробуй такой вариант:
Код: Выделить всё
MOVS R6,R5
SUBS R5,R6,1
CMP R6,#0
BNE.N ??Main_1
пользую IAR 6.5coredumped писал(а):А компайлер какой?
FPGAlover писал(а): "4FF48051 mov r1, #4096" откуда берется константа 4096?