Перейти к содержанию
    

lilo13941

Участник
  • Постов

    5
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о lilo13941

  • День рождения 28.04.1988

Информация

  • Город
    Array
  1. LCD на SAM7-ex256

    Предпринимается попытка вывести на дисплей точку. Контроллер дисплея- Epson S1D15G00. Код следующий: volatile AT91PS_PIO pPIOA = AT91C_BASE_PIOA; void Delay (unsigned long a) { while (--a!=0); } void SpiInit() { *AT91C_PIOB_OER=BIT20; *AT91C_PIOB_SODR=BIT20; *AT91C_PIOB_OER=BIT2; *AT91C_PIOB_SODR=BIT2; *AT91C_PIOB_OER=BIT12; *AT91C_PIOB_SODR=BIT12; *AT91C_PIOB_PDR=BIT12 | BIT16 | BIT17 | BIT18; *AT91C_PIOB_ASR=BIT12 | BIT16 | BIT17 | BIT18; *AT91C_PIOB_BSR=0x0; *AT91C_PMC_PCER=1 << AT91C_ID_SPI0; *AT91C_SPI0_CR=AT91C_SPI_SWRST | AT91C_SPI_SPIEN; *AT91C_SPI0_CR=AT91C_SPI_SPIEN; *AT91C_SPI0_MR=(AT91C_SPI_DLYBCS & (0 << 24)) | (AT91C_SPI_PCS & (0xE << 16)) | (AT91C_SPI_LLB & (0 << 7)) | (AT91C_SPI_MODFDIS & (1 << 4)) | (AT91C_SPI_PCSDEC & (0 << 2)) | (AT91C_SPI_PS & (0 << 1)) | (AT91C_SPI_MSTR & (1 << 0)); *AT91C_SPI0_CSR =(AT91C_SPI_DLYBCT & (0x01 << 24)) | (AT91C_SPI_DLYBS & (0x01 << 16)) | (AT91C_SPI_SCBR & (0x10 << 8)) | (AT91C_SPI_BITS & (AT91C_SPI_BITS_9)) | (AT91C_SPI_CSAAT & (0x0 << 3)) | (AT91C_SPI_NCPHA & (0x0 << 1)) | (AT91C_SPI_CPOL & (0x01 << 0)); } void WriteSpiCommand(volatile unsigned int command) { while((*AT91C_SPI0_SR & AT91C_SPI_TXEMPTY) == 0); command = (command & ~0x0100); *AT91C_SPI0_TDR = command; } void WriteSpiData (volatile unsigned int data) { while ((*AT91C_SPI0_SR & AT91C_SPI_TXEMPTY) ==0); data=(data | 0x100); *AT91C_SPI0_TDR=data; } void InitLcd(void) { LCD_RESET_LOW; Delay(10000); LCD_RESET_HIGH; Delay(10000); WriteSpiCommand(DISCTL); WriteSpiData(0x00); WriteSpiData(0x20); WriteSpiData(0x00); WriteSpiCommand(COMSCN); WriteSpiData(1); WriteSpiCommand(OSCON); WriteSpiCommand(SLPOUT); WriteSpiCommand(PWRCTR); WriteSpiData(0x0f); WriteSpiCommand(DISINV); WriteSpiCommand(DATCTL); WriteSpiData(0x01); WriteSpiData(0x00); WriteSpiData(0x02); WriteSpiCommand(VOLCTR); WriteSpiData(32); WriteSpiData(3); Delay(100000); WriteSpiCommand(DISON); } void LCDSetPixel(int x, int y, int color) { WriteSpiCommand(PASET); WriteSpiData(x); WriteSpiData(x); WriteSpiCommand(CASET); WriteSpiData(y); WriteSpiData(y); WriteSpiCommand(RAMWR); WriteSpiData((color >> 4) & 0xFF); WriteSpiData(((color & 0xF) << 4) | ((color >> 8) & 0xF)); WriteSpiData(color & 0xFF); } void LCDClearScreen(void) { long i; WriteSpiCommand(PASET); WriteSpiData(0); WriteSpiData(131); WriteSpiCommand(CASET); WriteSpiData(0); WriteSpiData(131); WriteSpiCommand(RAMWR); for(i = 0; i < ((131 * 131) / 2); i++) { WriteSpiData((BLACK >> 4) & 0xFF); WriteSpiData(((BLACK & 0xF) << 4) | ((BLACK >> 8) & 0xF)); WriteSpiData(BLACK & 0xFF); } } int main(void) { LowLevelInit(); SpiInit(); InitLcd(); LCDClearScreen(); LCDSetPixel(10,10,RED); } В результате загорается подсветка дисплея, а точкой и не пахнет. Если есть каие- нибудь мысли поделитесь пожалуйста...
  2. Да. Действительно заработало! Большое спасибо!
  3. Хотелось бы чтобы при нажатии на кнопку загоралась подсветка дисплея, а в противном случае нет. Вот такой код: void light_on() { *AT91C_PIOB_OER=0x100000; *AT91C_PIOB_SODR=0x100000; } void light_off() { *AT91C_PIOB_OER=0x100000; *AT91C_PIOB_CODR=0x100000; } int main(void) { *AT91C_PIOB_PER=0x01000000; *AT91C_PIOB_ODR=0x01000000; while (1) { if(!(*AT91C_PIOB_PDSR & 0x01000000)) { light_on(); } else { light_off(); } } } Результат =0. Может кто знает почему. Заранее спасибо!
  4. т. е. несмотря на лишнюю строку код всё таки похож на роботоспособный? А вот как этот стартап подключить к проекту, и где его вообще взять?
  5. Здравствуйте! У мнея следующая проблема: На плате SAM-EX256 хочу заставит пищать динамик. Судя по схеме он подключен к выводу PB19. Если я всё правильно понимаю, то задача сводится к тому, чтобы на этом выводе сгенерировать сигнал с частотой 20-20000 Гц. В IAR пишу следующее: #include "ioat91sam7x256.h" int main() { AT91C_BASE_PMC->PMC_PCER = (1ul<<AT91C_ID_PIOA); AT91C_PIOB_OER[0]=0x80000; for (int y=0; y!=0xffffffff;y++) { for (long u=0; u!=10000;u++) { AT91C_PIOB_SODR[0]=0x80000; } for (long u=0; u!=10000;u++) { AT91C_PIOB_CODR[0]=0xffffffff; } } return 0; } и конечно ничего не работает... Если есть какие- то мысли, топожалуйста поделитесь. Я подозреваю, что проблема в настройках компилятора, а еще не совсем понятно что такое стартап и с чем его едят? Заранее спасобо!!!
×
×
  • Создать...