Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Обзо питане за Wismo 228 модул
http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=15053
Страница 1 от 1

Автор:  flancer [ Вто Фев 07, 2017 8:56 pm ]
Заглавие:  Обзо питане за Wismo 228 модул

Понеже се занимавам и с касови апарати - отвреме навреме ми изпадат модулчета със някакъв LPC процесор и модем WISMO228 на Datecs - кадърно направен хардуевр изглежда, за разлика от новите неща. Някой играл ли си е с такива, иска ми се да им намеря друго приложение вместо да ги хвърлям в коша. Вярно, че ново модулче А6 е 5$ в при джигитайците, но могат да се ползват като GSM дайлърчета примерно.

Проблемът ми е, че не виждам никаква серийна комуникация на TX/RX изводите на модемчето между него и професора. Предполагам, че са пуснати в някой от другите режими, но как мога да го, ъъъ, вкарам в някакъв фейлсейф режим да видя жив ли е въобще, поема ли АТ команди и т.б.? Има ли начин да се закъси някой пин и да се ресетне модемчето да го видя без LPC-то справя ли се, и после мога да си играя да напиша някоя програмка за LPC-то. Но ми трябва начало - как се пуска, как се говори с него, общи приказки - ако някой се е ровил.

Автор:  relsys [ Вто Фев 07, 2017 9:22 pm ]
Заглавие:  Re: Обзо питане за Wismo 228 модул

Това е за да го ползваш като модем.

Код:

#include "lpc23xx.h"

typedef volatile unsigned int *reg32_t;

//#define MAMCR (*(reg32_t)0xE01FC000)
#define IOPIN (*(reg32_t)0xE0028010)
#define IOSET (*(reg32_t)0xE0028014)
#define IODIR (*(reg32_t)0xE0028018)
#define IOCLR (*(reg32_t)0xE002801C)
#define IOPINSEL0 (*(reg32_t)0xE002C00C)

#define OSCEN 5

#define LEDMASK   0x1 //0xFFFFFFFF

volatile unsigned char ch = 0x20;
volatile unsigned long port2;
volatile unsigned long port4;
volatile unsigned long port2n;
volatile unsigned long port4n;
volatile unsigned long porttemp = 0ul;
volatile unsigned long port2out;

volatile unsigned long ticks = 0;
volatile unsigned long tx_now;
volatile unsigned long tx_last;

void Init_MCU()
{
  SCS  = 0x00000029;//|= (1 << OSCEN);
  CLKSRCSEL = 1;
   
  /*// disconnect/disable
  PLLCON  = 0x0;
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  // configure
  CLKSRCSEL = 1; // Switch to main oscillator input (12 MHz)
  PLLCFG  = (0x2 << 9) | 0x19; // Fcco=2*10*12/2=120 MHz
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  // enable
  PLLCON  = 0x1;
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  // wait for lock
  while (!(PLLSTAT & (1 << 26)));
  // connect
  PLLCON  = 0x3;
  PLLFEED = 0xaa;
  PLLFEED = 0x55;
  // set CPU clock to 120/6 = 20 MHz
  CCLKCFG = 5;*/


   //FIO2DIR |= 0xFFFFFFFF;//0x00000400;
   //FIO2MASK |= 0xFFFFFFFF;//0x00000400;

   //FIO0DIR |= 0xFFFFFFFF;
   //FIO0MASK |= 0xFFFFFFFF;

   //FIO1 - LEDs output
   FIO1DIR |= 0xFFFFFFFF;
   FIO1MASK |= 0x0000000;//0xFFFFFFFE;  //0x0000000;

   FIO4DIR |= 0x0000000 | (1ul << 28);  //P4.28 -> TxD3 as output
   FIO4MASK |= 0x0000000;

   FIO2DIR |= 0x0000000 | (1ul << 2) | (1ul << 0) | (1ul << 8);  //CTS to GSM and TxD to GSM and CTS to PC  (MAIN RS232)  as outputs
   FIO2MASK |= 0x0000000;

   FIO0DIR |= 0x0000000 | (1ul << 20) | (1ul << 22);  //ON/~OFF and ~RESET as outputs
   FIO0MASK |= 0x0000000;
   FIO0PIN = 0ul;//1ul << 20;  pin P0.20  - On/OFF should be LOW for at least 685ms for power up and internal VCC2.8 to be out

   //FIO3DIR |= 0xFFFFFFFF;
   //FIO3MASK |= 0xFFFFFFFF;

   //IOPINSEL0  = 0x00000000;
   //IODIR |= LEDMASK;

   PINSEL4 = 0x00000000;
}

static void ledOn(int led)
{
  IOCLR = led;
}

static void ledOff(int led)
{
  IOSET = led;
}

void delay(unsigned long long d)
{
  for(; d; --d);
}

int TestLED(void)
{
  unsigned long i, j;

  //ledInit();
  ledOff(LEDMASK);
  for(i = 0; i < 256000; i++)
    delay(20000000);
  ledOn(LEDMASK);
  for(i = 0; i < 256000; i++)
    delay(20000000);
  return 0;
}

void Get_Ports()
{
  port2 = FIO2PIN;
  port4 = FIO4PIN;
}

void Set_Ports()
{
  FIO2PIN = port2out;
  FIO4PIN = port4n;
}


void main()
{
  Init_MCU();

  FIO1PIN = ~0x00ul;  //turn off leds

  while(1)
    {
      FIO2PIN = ((FIO4PIN & (1ul << 29)) >> 29) |  //read External RxD and Send to GSM
                ((FIO2PIN & (1ul << 9)) >> 7)   |  //External CTS (from PC) to GSM_RTS
                ((FIO2PIN & (1ul << 7)) << 1);     //GSM CTS (from GSM) to PC_RTS
 
      FIO4PIN = ((FIO2PIN & (1ul << 1)) << 27);   //read GSM TxD and send to RS232-TxD

      /*
      //External CTS (from PC) to GSM_RTS:
      FIO2PIN |= ((FIO2PIN & (1ul << 9)) >> 7);
      //GSM CTS (from GSM) to PC_RTS:
      FIO2PIN |= ((FIO2PIN & (1ul << 7)) << 1);
      */

      //check for gsm halted
      tx_now = FIO2PIN & (1ul << 1);
      if (tx_now == tx_last)
        {
          ticks++;
          if (ticks >= 21000000ul)  //6 000 000 => ~8.5 seconds; 21 000 000 => ~30 seconds
            {
              //reset_gsm:
              FIO0PIN |= 1ul << 22;
              ticks = 600000ul;  //600 000 => ~100 ms
              while(--ticks)
                ;
              FIO0PIN &= ~(1ul << 22);

              ticks = 0;
            }
        }
      else
        {
          ticks = 0;
        }
      tx_last = tx_now;

      //Debug & display:
      FIO1PIN = 0xFFFFFFFC | ((((FIO4PIN & (1ul << 29)) >> 29) & 1ul) | (((FIO4PIN & (1ul << 28)) >> 27) & 2ul));  //Display RxD & Txd on LEDs: 0,1
      //FIO4PIN =  ((FIO4PIN & (1ul << 29)) >> 1) & (1ul << 28);  //echo on TxD
    }
}

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/