基于新唐M0的M0516LAN的SIM900A的驱动测试

发布者:sunyouz1最新更新时间:2015-07-30 来源: eefocus关键字:新唐M0  M0516LAN  SIM900A  驱动测试 手机看文章 扫描二维码
随时随地手机看文章
基于新唐M0的M0516LAN的SIM900A的驱动测试

元旦放假,急于赶一个小项目,做了一个M0516LAN驱动SIM900A的测试。第一次用SIM900A,其中遇到几个小问题,调了好久,也问过群里用过SIM900A的几位朋友才调通,在此感谢。最弱智的问题是我把NRESET接到了PWM3上,然后又启动了PWM3,虽然后面把P43置成IO输出却不成功,然后大半晚上就那么悲剧掉了。新唐的库是置成了复用功能再想置回IO,需要先DrvGPIO_InitFunction(E_FUNC_GPIO);才能配置IO功能的。我后来还是不启动PWM就通过了开机过程。只要SIM900A开机了,NETLIGHT的LED就会闪烁,不管有没有SIM卡。另外,所有SIM900A的AT命令都是以“ ”结束的。

 

 

“sim900a.c ”文件源码如下:

#include
#include

#include "DriverDrvUART.h"
#include "DriverDrvGPIO.h"
#include "DriverDrvSYS.h"

#define PWRKEY   E_PORT2, E_PIN1
#define NRESET  E_PORT4, E_PIN3
#define STATUS   E_PORT2, E_PIN3
#define RI   E_PORT3, E_PIN2
#define CTS   E_PORT0, E_PIN0
/*
_________________________________________________
| M0516LAN      SIM900A  |
|            |
| P21  PWRKEY  ---->  PWRKEY  |
| P43  NRESET  ---->  NRESET  |
| P23  STATUS  <----  STATUS  |
| P32  RI   <----  RI   |
| P00  CTS1  <----  CTS   |
| P13  TXD1  ---->  RXD   |
| P12  RXD1  <----  TXD   |
|_______________________________________________|
*/
int UART1_init(void)
{
 STR_UART_T sParam;

 /* Set UART1 Pin */
 DrvGPIO_InitFunction(E_FUNC_UART1);
// outpw(&SYS->P1_MFP, (inpw(&SYS->P1_MFP) | (0x3<<10)) & ~(0x3<<2));
// outpw(&SYS->P0_MFP, (inpw(&SYS->P0_MFP) | (0x3<<8)) & ~(0x3<<0));

 /* Select UART1 Clock Source From 12Mhz*/
 DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC,0);

 /* UART1 Setting */
    sParam.u32BaudRate   = 9600;
    sParam.u8cDataBits   = DRVUART_DATABITS_8;
    sParam.u8cStopBits   = DRVUART_STOPBITS_1;
    sParam.u8cParity   = DRVUART_PARITY_NONE;
    sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES;

 if(DrvUART_Open(UART_PORT1,&sParam) != E_SUCCESS)
 {
  printf("UART1 open failed ");
  return FALSE;
 }
 /* Enable Interrupt and install the call back function */
// DrvUART_EnableInt(UART_PORT1, (DRVUART_RLSINT | DRVUART_RDAINT),UART1_INT_HANDLE);
  
 /* Disable Interrupt */
// DrvUART_DisableInt(UART_PORT1,DRVUART_RLSINT | DRVUART_THREINT | DRVUART_RDAINT);

 return TRUE;
}

int SIM900A_Open(void)
{
 int dly;

 DrvGPIO_ClrBit(PWRKEY);
 for(dly=0;dly<2000;dly++) DrvSYS_Delay(1000); //delay 1S
 DrvGPIO_SetBit(PWRKEY);

 for(dly=0;dly<3000;dly++) DrvSYS_Delay(1000); //delay 3S
 if(DrvGPIO_GetBit(STATUS))
 {
  printf("SIM900A Open Success!!! ");
  return 1;
 }
 else
 { 
  printf("SIM900A Open Failure!!! ");
  return 0;
 }
}

int SIM900A_Close(void)
{
 int dly;

 DrvGPIO_ClrBit(PWRKEY);
 for(dly=0;dly<6000;dly++) DrvSYS_Delay(1000); //delay 1S-5S
 DrvGPIO_SetBit(PWRKEY);

 for(dly=0;dly<4000;dly++) DrvSYS_Delay(1000); //delay 2S

 if(DrvGPIO_GetBit(STATUS))
 { 
  printf("SIM900A Close Failure!!! ");
  return 1;
 }
 else
 { 
  printf("SIM900A Close Success!!! "); 
  return 0;
 }
}

int SIM900A_Reset(void)
{
 int dly;

 DrvGPIO_ClrBit(NRESET);
 DrvSYS_Delay(100);       //delay 20uS-50uS
 DrvGPIO_SetBit(NRESET);

 for(dly=0;dly<2000;dly++) DrvSYS_Delay(1000); //delay 2S
 if(DrvGPIO_GetBit(STATUS)==1)
  return 1;
 else
  return 0;
}
int SIM900A_init(void)
{
    int  ret =0;

 DrvGPIO_Open(STATUS,  E_IO_INPUT);
 DrvGPIO_Open(RI,   E_IO_INPUT);
 DrvGPIO_Open(CTS,   E_IO_INPUT);
 DrvGPIO_Open(PWRKEY,  E_IO_OUTPUT);
 DrvGPIO_Open(NRESET,  E_IO_OUTPUT);

 DrvGPIO_SetBit(PWRKEY);
 DrvGPIO_SetBit(NRESET);

 ret = SIM900A_Open();
 UART1_init();

 return ret;
}[page]

int SIM900A_gets(char *buf)
{
 int ret=0;
 int dly=3000000;   // delay 3S

 while(dly-->1)  
 {
  if(UART1->FSR.RX_EMPTY == 0 )
  {
   *buf++ =UART1->DATA;//printf("%c",*(buf-1));
   ret++;dly=10000; //delay  10ms
  }
  DrvSYS_Delay(1);   //delay 1us
 }
 return ret;
}

void SIM900A_puts(const char *buf)
{
 while(*buf)
 { 
  while(UART1->FSR.TX_FULL == 1); 
  UART1->DATA =(*buf++)&0xff;//printf("%c",*(buf-1));
 }
}

// AT+CPOWD=1   //Power down
// AT+CFUN=x    //Power Saving
// AT+CBC  //monitor the supply voltage
// AT+IPR=x  //fixed baud rate ,“RDY” is received
// AT+CSCLK=1 //enable the SLEEP mode
// AT+CMIC  //adjust the input gain level of microphone
// AT+SIDET  //set the side-tone level
// AT+CLVL  //adjust the output gain level
// AT+CADC  //read the voltage value on ADC 

void SIM900A_test(void)
{
 char buffer[128];

 printf(" ");
 printf("*** 9G-M0516 V1.00 Build by yuanxihua@21cn.com on ("__DATE__ " - " __TIME__ ") ");
 printf("*** 9G-M0516 V1.00 Rebooting ... ");

 SIM900A_init();
 
 printf("SIM900A_test Send AT COMMAND @ 9600 bps !!! ");

// SIM900A_puts("ATI ");
 SIM900A_puts("AT+GMM ");
 if(SIM900A_gets(buffer)>0) 
 {printf(" %s ",buffer);}
}

//源码完毕。--缥缈九哥调试通过。

半主机的调试信息如下:

*** 9G-M0516 V1.00 Build by yuanxihua@21cn.com on (Jan  3 2012 - 13:16:32)
*** 9G-M0516 V1.00 Rebooting ...

SIM900A Open Success!!!
SIM900A_test Send AT COMMAND @ 9600 bps !!!

AT+GMM
SIMCOM_SIM900A

OK

关键字:新唐M0  M0516LAN  SIM900A  驱动测试 引用地址:基于新唐M0的M0516LAN的SIM900A的驱动测试

上一篇:基于新唐NUC120RD2BN的EBI接口的ILI9327的驱动程序
下一篇:基于新唐M0516LAN的SD5128的驱动测试

推荐阅读最新更新时间:2024-03-16 14:26

测试三相无刷电机驱动器 XXD2212 电调
一、无刷电机驱动模块 1、基本介绍   高速无刷电机现在被广泛应用在小型无人四旋翼飞机、电动工具、电动车平台中。下面是由北京科宇发送过来的一个 三项无刷电机驱动模块。 ▲ 图1.1 拆开后的三相无刷电机驱动板   在模块的背面,由六个功率MOS管组成的三项MOS桥电路组成。电路的证明则是由单片机 NUVOTON(新塘) 新唐科技MS51FB9AE控制器简介 组成核心,然后形成三相桥电路的驱动电路。 ▲ 图1.2 驱动模块正面控制器部分的电路 2、外部接口   电机驱动模块外部具有三组接口: 外部接口: 电机接口: 是由三条电机接口电线组成 电源:是由 红-黑电源线构成 控制端口:使用三根类似于舵机控制线组成。
[测试测量]
<font color='red'>测试</font>三相无刷电机<font color='red'>驱动</font>器 XXD2212 电调
S3C2440 DMA驱动程序编写及测试(三十二)
DMA(Direct Memory Access) 即直接存储访问,DMA传输方式无需CPU直接控制传输,通过硬件为RAM、I/O设备开辟一条直接传输数据的通路,能使CPU的效率大为提高。 学了这么多驱动,不难退出DMA的编写套路: 1)注册DMA中断,分配缓冲区 2)注册字符设备,并提供文件操作集合fops - 2.1)file_operations里设置DMA硬件相关操作,来启动DMA 由于我们是用字符设备的测试方式测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,所以采用字符设备方式编写 1、驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器、使用DMA中断 1.1 在linux中,分配释
[单片机]
S3C2440 DMA<font color='red'>驱动</font>程序编写及<font color='red'>测试</font>(三十二)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved