Вы, вместо того, что костыли лепить, опишите зачем вам это. Что вы хотите этим костылём добиться.
Наверняка имеется иное, нормальное решение вашей задачи без костылей.
Там этого нет. Это ассемблер. Причём даже не ARM, а C51.TEPEM писал(а):не помню такого в КиР

Зачем подряд дважды делать операцию чтение-модификация-запись над одним и тем же регистром?TEPEM писал(а):Что то все перепробовал
Код: Выделить всё
GPIOA->ODR &= ~(1<<4); // CS=0
GPIOA->ODR &= ~(1<<2); // DC=0
Код: Выделить всё
GPIOA->ODR &= ~((1<<2)|(1<<4)); // CS=0, DC=0
Код: Выделить всё
GPIOA->BRR = (1<<2)|(1<<4); // CS=0, DC=0
Код: Выделить всё
#define SPI_CNTRL_PORT GPIOA
#define DC_PIN_POS 2
#define DC_PIN_MSK (1<<DC_PIN_POS)
#define CS_PIN_POS 4
#define CS_PIN_MSK (1<<CS_PIN_POS)
SPI_CNTRL_PORT->BRR = CS_PIN_MSK|DC_PIN_MSK; // CS=0, DC=0
Код: Выделить всё
void Send_CMD(uint8_t dat)
{ //Otpravka komand
GPIOA->ODR &= ~(1<<4) | (1<<2); //ChipSelect loy
SPI1->CR1 &= ~SPI_CR1_DFF;
while (!(SPI1->SR & SPI_SR_TXE));
SPI1->DR = dat;
while (!(SPI1->SR & SPI_SR_TXE));
while ((SPI1->SR & SPI_SR_BSY));
GPIOA->ODR |= (1<<4); //ChipSelect Up
}
Код: Выделить всё
GPIOA->BRR = (1<<2)|(1<<4); // CS=0, DC=0
Код: Выделить всё
//GPIOA->BSRR = ((1<<4)|(1<<2)) << 16;
LDR.N R1,??DataTable2
MOV R0,#+1310720
STR R0,[R1, #+0]
??DataTable2:
DATA32
DC32 0x40020018 Код: Выделить всё
//*(((volatile uint16_t *)&GPIOA->BSRR)+1) = (1<<4)|(1<<2);
LDR.N R1,??DataTable2
MOVS R0,#+20
STRH R0,[R1, #+0]
??DataTable2:
DATA32
DC32 0x4002001aКод: Выделить всё
if(GPIOB->IDR & (1<<1))Код: Выделить всё
if(GPIOB->IDR & (1<<1))