ПДП в AT91RM9200 Есть платка от аргуссофта AS9200 на AT91RM9200.
В datasheet на микроконтроллер написано, что предусмотрен режим ПДП для работы с последовательным портом.
Настраивал UART в 9-битный режим через PDC и контроллер завис.
Однако, при настройке в восьмибитный режим через ПДП - передача работала, равно как и при настройке в 9-битный режим без ПДП.
Вот листинг программы которая по идее должна посылать в порт через ПДП 9-битные символы, но не работает.((
<c>
// ----- PIOB
#define PIOB_PER *(unsigned int *)0xFFFFF600
#define PIOB_PDR *(unsigned int *)0xFFFFF604
#define PIOB_OER *(unsigned int *)0xFFFFF610
#define PIOB_SODR *(unsigned int *)0xFFFFF630
#define PIOB_CODR *(unsigned int *)0xFFFFF634
#define PIOB_MDDR *(unsigned int *)0xFFFFF654
#define PMC_PCER *(unsigned int *)0xFFFFFC10
// ----- UART1
#define US_CR *(unsigned int *)0xFFFC4000
#define US_MR *(unsigned int *)0xFFFC4004
#define US_CSR *(unsigned int *)0xFFFC4014
#define US_BRGR *(unsigned int *)0xFFFC4020
#define US_IDR *(unsigned int *)0xFFFC400C
#define PDC_TPR *(unsigned int *)0xFFFC4108
#define PDC_TCR *(unsigned int *)0xFFFC410C
#define PDC_PTCR *(unsigned int *)0xFFFC4120
unsigned short int buffer;
void main()
{
PIOB_OER = 0xFFFFFFFF;
PIOB_MDDR = 0xFFFFFFFF;
PMC_PCER = 0xfffffffd;
PIOB_PDR = 0xFFFFFFF0;
US_MR = 0x000208C0; // Normal mode, 1 stop bit, no parity, async mode, 9 bits.
US_IDR = 0xffffffff; // Disable all USART interrupts.
US_BRGR = 42;
US_CR = 0x000000a0; // Disable receiver, disable transmitter.
US_CR = 0x0000010c; // Reset status bits, reset rx/tx.
US_CR = 0x00000050; // Enable receiver, enable transmitter.
buffer = 0x155;
PDC_PTCR = 0x100;
while(1){
PDC_TPR = (unsigned int) &buffer;
PDC_TCR = 0x001;
for (int i = 1; i<5535; i++){
PIOB_SODR = 0x01; //TEST_PIN;
PIOB_CODR = 0x01; //TEST_PIN;
}
}
}
</c>
При смене режима работы на 8-битный режим, то есть при замене строчки "US_MR = 0x000208C0;" на "US_MR = 0x000008C0;" посылки в порт идут...
В чем может быть дело?