koyodza (04.08.2011 15:35, просмотров: 96) ответил Гудвин на Давно хотел спросить: Как ты подсоединяешь CP2200 к STM? Ногодрыжишь?
да, почти что. В новые проекты закладывать не планирую Использую мультиплексированный адрес (СР2201), данные вывожу через РС0..РС7, остальные сигналы разбросаны.
Вот кусок:
#define CP2201_DATA_SET(d) CP2201_DATA_GPIO->BSRR=(d&255),CP2201_DATA_GPIO->BRR=((~(d))&255)
#define CP2201_DATA_ACCESS() CP2201_DATA_GPIO->CRL=0x33333333UL
#define CP2201_DATA_RELEASE() CP2201_DATA_GPIO->CRL=0x44444444UL
///////////////////////////////////////////////////////////////////////////////
__private void CP2201_Write(BYTE adr, BYTE data)
{
CP2201_ALE_GPIO->BSRR = CP2201_ALE_PIN; // ALE = 1;
CP2201_DATA_ACCESS(); // DIR MCU->CP2201
CP2201_DATA_SET(adr); // ADR
CP2201_ALE_GPIO->BRR = CP2201_ALE_PIN; // ALE = 0;
CP2201_DATA_SET(data); // DATA Write
CP2201_WR_GPIO->BRR = CP2201_WR_PIN; // WR = 0;
CP2201_WR_GPIO->BRR = CP2201_WR_PIN;
CP2201_WR_GPIO->BSRR = CP2201_WR_PIN; // WR = 1;
}
__private BYTE CP2201_Read(BYTE adr)
{
CP2201_ALE_GPIO->BSRR = CP2201_ALE_PIN; // ALE = 1;
CP2201_DATA_ACCESS(); // DIR MCU->CP2201
CP2201_DATA_SET(adr); // ADR
CP2201_ALE_GPIO->BRR = CP2201_ALE_PIN; // ALE = 0;
CP2201_DATA_RELEASE(); // DIR MCU<-CP2201
CP2201_RD_GPIO->BRR = CP2201_RD_PIN; // RD = 0;
CP2201_DATA_RELEASE();
CP2201_RD_GPIO->BRR = CP2201_RD_PIN;
CP2201_DATA_RELEASE();
CP2201_RD_GPIO->BRR = CP2201_RD_PIN;
CP2201_DATA_RELEASE();
BYTE x = (BYTE)CP2201_DATA_GPIO->IDR; // DATA Read
CP2201_RD_GPIO->BSRR = CP2201_RD_PIN; // RD = 1;
return x;
}