搜索
bottom↓
回复: 82

LPC1768学习,我要建一个最大主题,因为目前太少有人学core_M3了,阿莫大哥帮帮忙

[复制链接]

出0入0汤圆

发表于 2011-7-26 11:13:59 | 显示全部楼层 |阅读模式
我上传我自己有的很多资料供大家学习,我弄了LPC1768蛮久了,但是遇到的问题很多很多,一起让我们来学习core_M3吧

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入137汤圆

发表于 2011-7-26 11:16:45 | 显示全部楼层
不知所云。

出0入0汤圆

 楼主| 发表于 2011-7-26 11:20:47 | 显示全部楼层
回复【1楼】pulan
-----------------------------------------------------------------------

我刚刚上传东西的,谢谢你,我会上传很多我的资料,供大家学习

出0入0汤圆

发表于 2011-7-26 11:23:13 | 显示全部楼层
======

出0入0汤圆

 楼主| 发表于 2011-7-26 11:23:53 | 显示全部楼层
点击此处下载 ourdev_661176S1AO52.zip(文件大小:37.63M) (原文件名:文档资料.zip)

出0入0汤圆

 楼主| 发表于 2011-7-26 11:26:48 | 显示全部楼层
点击此处下载 ourdev_661177W2RGJN.zip(文件大小:41.75M) (原文件名:实验例程.zip)

出0入85汤圆

发表于 2011-7-26 11:28:53 | 显示全部楼层
是Cortex-M3吧,谁说学M3的人少啊,只不过搞STM32的居多(STM32 Raido、STM32+摄像头、STM32做小霸王游戏机等等),玩LPC的人少点罢了

出0入0汤圆

 楼主| 发表于 2011-7-26 11:30:27 | 显示全部楼层
回复【6楼】Huaan
-----------------------------------------------------------------------

恩,现在我的团队都是搞stm32,只有我们2个在搞1768哎,想哭去.....都没有人交流,都是自己去弄,去研究

出0入0汤圆

 楼主| 发表于 2011-7-26 11:36:42 | 显示全部楼层
点击此处下载 ourdev_661181H4JZJS.zip(文件大小:29K) (原文件名:超声波.zip)
点击此处下载 ourdev_661182CWIM7C.rar(文件大小:4.99M) (原文件名:Curve1.rar)
点击此处下载 ourdev_661183G4P19D.rar(文件大小:3.39M) (原文件名:智能小车设计指导 第二版.rar)
点击此处下载 ourdev_661184QYZ1OH.zip(文件大小:83.42M) (原文件名:MDK软件教程及相关.zip)
点击此处下载 ourdev_661185PUANB1.zip(文件大小:10.49M) (原文件名:Cortex M3相关文章.zip)
点击此处下载 ourdev_661186TROQUG.zip(文件大小:1.42M) (原文件名:【实验30】OV7670摄像头测试程序.zip)
点击此处下载 ourdev_661187T6NF5O.zip(文件大小:461K) (原文件名:FAT32_图片OK.zip)

出0入0汤圆

 楼主| 发表于 2011-7-26 11:42:36 | 显示全部楼层
无线,昨天编的

出0入0汤圆

 楼主| 发表于 2011-7-26 11:42:51 | 显示全部楼层
/*************************************************
使用该模块驱动时要需修改nRF24L01_PIN()中的管脚配置
并修改24L01_PIN_function被定义为哪个寄存器即可调用驱动

***************************************************/
#include <lpc17xx.h>
#include "nRF24L01.h"
typedef unsigned char BYTE;
typedef unsigned char uchar;

/**************************************************
管脚的配置情况,注意:此函数必须在main()中先调用
**************************************************/
void nRF24L01_PIN()                                                                        //注意(修改地方)
{        LPC_PINCON->PINSEL0=0x00000000;       
        LPC_GPIO0->FIODIR |= 0x0000003f;
}

/*******************************************
在PIN管脚定义中24L01_PIN_function被定义为寄存器
*******************************************/
#define         function_24L01_PIN_1   ( LPC_GPIO0->FIOSET0 )  //注意(修改地方)
#define         function_24L01_PIN_0   ( LPC_GPIO0->FIOCLR0 )
/**************************************************
     PINS:
   -3.3V (1)                       - 空脚  (2)          
   - CE  (3)     = P0.0                   - CSN    (4)   = P0.3
   - SCK (5)     = P0.1            - MOSI   (6)   = P0.4
   - MISO(7)     = P0.2                   - IQR    (8)   = P0.5
   - GND (9)                       - 空脚  (10)  
****************************************************/
#define RF_CE                (1 << 0)
#define RF_SCK                (1 << 1)
#define RF_MISO            (1 << 2)
#define RF_CSN      (1 << 3)
#define RF_MOSI                (1 << 4)
#define RF_IQR                (1 << 5)

/**************************************************/
/* Pin MISO setting to 0 or 1                                                   */
#define nRF_MISO(x)   ((x) ? (function_24L01_PIN_1 = RF_MISO) : (function_24L01_PIN_0 = RF_MISO));
/* Pin MOSI setting to 0 or 1                                                   */
#define nRF_MOSI(x)   ((x) ? (function_24L01_PIN_1 = RF_MOSI) : (function_24L01_PIN_0 = RF_MOSI));
/* Pin SCK setting to 0 or 1                                                   */
#define nRF_SCK(x)   ((x) ? (function_24L01_PIN_1 = RF_SCK) : (function_24L01_PIN_0 = RF_SCK));
/* Pin CE setting to 0 or 1                                                   */
#define nRF_CE(x)     ((x) ? (function_24L01_PIN_1= RF_CE) : (function_24L01_PIN_0 = RF_CE));
/* Pin CSN setting to 0 or 1                                                   */
#define nRF_CSN(x)   ((x) ? (function_24L01_PIN_1 = RF_CSN) : (function_24L01_PIN_0= RF_CSN));
/* Pin IRQ setting to 0 or 1                                                   */
#define nRF_IRQ(x)   ((x) ? (function_24L01_PIN_1 = RF_IQR) : (function_24L01_PIN= RF_IQR));
/**************************************************/

uchar  TX_ADDRESS[TX_ADR_WIDTH]  = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address发送到地址0的数据
uchar  RX_ADDRESS[RX_ADR_WIDTH]  = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address接收地址0的数据
//通道0地址1
uchar  TX_ADDRESS1[TX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC2}; // Define a static TX address发送到地址1的数据
uchar  RX_ADDRESS1[RX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC2}; // Define a static TX address接收地址1的数据
//通道0地址2
uchar  TX_ADDRESS2[TX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC3}; // Define a static TX address发送到地址2的数据
uchar  RX_ADDRESS2[RX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC3}; // Define a static TX address接收地址2的数据
//通道0地址3
uchar  TX_ADDRESS3[TX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC4}; // Define a static TX address发送到地址3的数据
uchar  RX_ADDRESS3[RX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC4}; // Define a static TX address接收地址3的数据
//通道0地址4
uchar  TX_ADDRESS4[TX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC5}; // Define a static TX address发送到地址4的数据
uchar  RX_ADDRESS4[RX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC5}; // Define a static TX address接收地址4的数据
//通道0地址5
uchar  TX_ADDRESS5[TX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC6}; // Define a static TX address发送到地址5的数据
uchar  RX_ADDRESS5[RX_ADR_WIDTH]  = {0xC2,0xC2,0xC2,0xC2,0xC6}; // Define a static TX address接收地址5的数据
/********************************************
用于设置status寄存器中的这三位表示的事件发生时
是否通过IRQ引脚来反映,1,不反映在IRQ上,0反映
在IRQ上
*********************************************/
uint8_t     sta;
uint8_t     RX_DR;       
uint8_t         TX_DS;       
uint8_t         MAX_RT;       
/*******************************************/

void inerDelay_us(unsigned char n)
{        
unsigned int i,j;
        for(i=0; i<n;  i++)
    for(j=0; j<800; j++);
   
}

/**********************************************
             初始化
**********************************************/
void init_io(void)
{
           inerDelay_us(1000);
       nRF_CE(0);
       nRF_CSN(1);
       nRF_SCK(0);
       
       
}

/********************************************************************
SPI读写函数
写入一个字节并返回一个字节
ch:需要写入的字节
*********************************************************************/
uint8_t SPI_RW(uchar byte)
{
        uint8_t bit_ctr;
           for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit
           {
          
                      if(byte&0x80)
                                                           //MOSI = (byte & 0x80);output 'byte', MSB to MOSI
                        {       
                                nRF_MOSI(1);  
                        }
          else
                 {
                                nRF_MOSI(0);
                        }
                                                    //         IO0CLR = MOSI ;//更改部分
                byte = (byte << 1);                      // shift next bit into MSB..
               
       
                nRF_SCK(1);
        if( LPC_GPIO0->FIOPIN0& RF_MISO )// 逐个接收 MISO端口的数据。将数据存在 BUF_ISD的最高位   
       byte|=0x01;
                nRF_SCK(0);
               
           }
    return(byte);                             // return read byte
}

/**************************************************
Function: SPI_RW_Reg();

  Description:
  Writes value 'value' to register 'reg'
/**************************************************/
uchar SPI_RW_Reg(BYTE reg, BYTE value)
{
        uchar status;
    nRF_CSN(0); // CSN low, init SPI transaction
        status = SPI_RW(reg);  // select register
        SPI_RW(value); // ..and write value to it..
        nRF_CSN(1);
        return(status); // return nRF24L01 status byte
}
/**************************************************
Function: SPI_Read();

  Description:
  Read one byte from nRF24L01 register, 'reg'
/**************************************************/
BYTE SPI_Read(BYTE reg)
{
        BYTE reg_val;
        nRF_CSN(0) ;
        SPI_RW(reg);            // Select register to read from..
        reg_val = SPI_RW(0);    // ..then read registervalue
        nRF_CSN(1) ;
        return(reg_val);        // return register value
}
/**************************************************/

/**************************************************
Function: SPI_Read_Buf();

  Description:
  
/**************************************************/
uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
{
        uchar status,byte_ctr;
        nRF_CSN(0) ;
        status = SPI_RW(reg);                       // Select register to write to and read status byte
        for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
        pBuf[byte_ctr] = SPI_RW(0);   
        nRF_CSN(1) ;
        return(status);                    // return nRF24L01 status byte
}
/************************************************************************************************
函数: SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,bytes:写入数据的个数
************************************************************************************************/

uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
{
        uchar status,byte_ctr;
        nRF_CSN(0) ;
        status = SPI_RW(reg);   
        for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) //
        SPI_RW(*pBuf++);
           nRF_CSN(1) ;
        return(status);      
}


/********************************************************************************/
/*函数: SetRX_Mode(void)
/*功能:数据接收配置
/********************************************************************************/

unsigned char SetRX_Mode( unsigned char * p )//修改为指针地址,方便调用
{
       
        nRF_CE(0) ;                  //使用地址0
        SPI_RW_Reg(WRITE_REG+STATUS,sta);
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, p, RX_ADR_WIDTH); // Use the same address on the RX device as the TX device
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);   
        SPI_RW_Reg(WRITE_REG + RF_CH, 0);        
        SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);  // IRQ收发完成中断响应,16位CRC        ,主接收      
    nRF_CE(1) ;
   inerDelay_us(200);
  
}
/**************************************************/
unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
{
   unsigned char revale=0;
   sta=SPI_Read(STATUS);
   RX_DR = sta&0x40;
   TX_DS = sta&0x20;
   MAX_RT = sta&0x10;
        if(RX_DR)
        {
                nRF_CE(0) ;
                SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
                revale =1;//we have receive data
        }

        SPI_RW_Reg(WRITE_REG+STATUS,sta);
        return revale;
}

/**************************************************
Function: nRF24L01_TxPacket();

  Description:
  This function initializes one nRF24L01 device to
  TX mode, set TX address, set RX address for auto.ack,
  fill TX payload, select RF channel, datarate & TX pwr.
  PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.  
  ToDo: One high pulse(>10us) on CE will now send this
  packet and expext an acknowledgment from the RX device.
/**************************************************/
void nRF24L01_TxPacket(unsigned char * tx_buf)
{
       
        nRF_CE(0) ;
        SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);   
        SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);
        SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);
        inerDelay_us(10);//增加部分
        SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);     
        SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  
        SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);
        SPI_RW_Reg(WRITE_REG + RF_CH, 0);        
        SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   
        SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);   
    inerDelay_us(100);
        nRF_CE(1) ;
        inerDelay_us(100);
       
       
}
/**************************************************/

出0入0汤圆

发表于 2011-7-26 11:47:34 | 显示全部楼层
回复【7楼】pyy2010 阿帅
回复【6楼】huaan  
-----------------------------------------------------------------------
恩,现在我的团队都是搞stm32,只有我们2个在搞1768哎,想哭去.....都没有人交流,都是自己去弄,去研究
-----------------------------------------------------------------------

没感觉这个有多难呀,我第一次用LPC17xx的时候也没有用FAE的支持,自己就搞定了,项目也没有耽误工期。。。

出0入0汤圆

发表于 2011-7-26 12:17:40 | 显示全部楼层
楼主有相应的板子出售么

出0入0汤圆

发表于 2011-7-26 12:20:27 | 显示全部楼层
M3的东西,感觉没什么难度呀,芯片的应用不是问题,问题是拿它来做什么

出0入0汤圆

发表于 2011-7-26 13:46:04 | 显示全部楼层
正在用 谢谢楼主 常交流啊

出0入0汤圆

发表于 2011-7-26 13:46:41 | 显示全部楼层
貌似应该放到其他M3那个版块吧

出0入0汤圆

发表于 2011-7-26 14:41:45 | 显示全部楼层
LPC不是周立功在推么?资料应该不会少的吧

出0入0汤圆

发表于 2011-7-26 15:08:36 | 显示全部楼层
回复【7楼】pyy2010 阿帅
回复【6楼】huaan  
-----------------------------------------------------------------------
恩,现在我的团队都是搞stm32,只有我们2个在搞1768哎,想哭去.....都没有人交流,都是自己去弄,去研究
-----------------------------------------------------------------------

那你搞清楚,什么叫 core_M3 了么?
另外,什么叫 Cortex-M3 知道吗?

最大主题?不就是上传了2个附件么?

出0入0汤圆

 楼主| 发表于 2011-7-26 22:28:45 | 显示全部楼层
回复【11楼】_yuming
-----------------------------------------------------------------------

我想问定时器2、3和定时器01有什么区别呢,大哥?我弄23有问题........只是定时而已

出0入0汤圆

 楼主| 发表于 2011-7-26 22:29:18 | 显示全部楼层
回复【12楼】seaso 安多
-----------------------------------------------------------------------
没有啦...在这学习而已

出0入0汤圆

 楼主| 发表于 2011-7-26 22:30:00 | 显示全部楼层
回复【18楼】Cliff
-----------------------------------------------------------------------

还没有时间传啦,误解我啦,我会传的啦

出0入0汤圆

 楼主| 发表于 2011-7-26 22:31:04 | 显示全部楼层
回复【15楼】fishhead
-----------------------------------------------------------------------

恩,好的,有时间相互学习

出0入0汤圆

发表于 2011-7-26 23:09:38 | 显示全部楼层
谢谢楼主分享的资料。
编程菜鸟先谢过了。

出0入0汤圆

发表于 2011-7-27 01:02:16 | 显示全部楼层
谢谢楼上各位资料,收藏先~

出0入0汤圆

发表于 2011-7-27 03:56:12 | 显示全部楼层
谢谢,也在学习.
头像被屏蔽

出0入0汤圆

发表于 2011-7-27 07:46:12 | 显示全部楼层
mark 下,谢谢楼主

出0入0汤圆

发表于 2011-7-27 09:26:47 | 显示全部楼层
nice啊,楼主

出0入0汤圆

 楼主| 发表于 2011-7-28 12:07:02 | 显示全部楼层
回复【13楼】billowtust
-----------------------------------------------------------------------

你好,LPC1768的PWM 可以置两个电机在不同的频率吗??

出0入0汤圆

发表于 2011-7-29 10:56:42 | 显示全部楼层
mark!

出0入0汤圆

发表于 2011-8-5 16:49:43 | 显示全部楼层
MCU本质上没有大的差别,各个厂商的MCU基本上差不多,资源模块相似。其差异无非是在寄存器上,所以不管是那种CPU,看懂的它的datesheet是最重要,然后根据它写代码即可。
   注:如果你是高手可以用这种方法设计Code;但如果是初学者,最好修改官方的code,大多数初学者看datesheet很吃力,而且会减慢你的学习进度。

出0入0汤圆

发表于 2011-8-9 08:49:44 | 显示全部楼层
一、嵌入式系统设计方法变化的背景  

       嵌入式系统设计方法的演化总的来说是因为应用需求的牵引和IT技术的推动。  

       随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高。硅材料与人类智慧的结合,生产出大批量的低成本、高可靠性和高精度的微电子结构模块,推动了一个全新的技术领域和产业的发展。在此基础上发展起来的器件可编程思想和微处理(器)技术可以用软件来改变和实现硬件的功能。微处理器和各种可编程大规模集成专用电路、半定制器件的大量应用,开创了一个崭新的应用世界,以至广泛影响着并在逐步改变着人类的生产、生活和学习等社会活动。  

       计算机硬件平台性能的大幅度提高,使很多复杂算法和方便使用的界面得以实现,大大提高了工作效率,给复杂嵌入式系统辅助设计提供了物理基础。  

       高性能的EDA综合开发工具(平台)得到长足发展,而且其自动化和智能化程度不断提高,为复杂的嵌入式系统设计提供了不同用途和不同级别集编辑、布局、布线、编译、综合、模拟、测试、验证和器件编程等一体化的易于学习和方便使用的开发集成环境。

       硬件描述语言HDL(Hardware DescrIPtion Language)的发展为复杂电子系统设计提供了建立各种硬件模型的工作媒介。它的描述能力和抽象能力强,给硬件电路,特别是半定制大规模集成电路设计带来了重大的变革。目前,用得较多的有已成为IEEE为 STD1076标准的VHDL、IEEE STD 1364标准的Verilog HDL和Altera公司企业标准的AHDL等。  

       由于HDL的发展和标准化,世界上出现了一批利用HDL进行各种集成电路功能模块专业设计的公司。其任务是按常用或专用功能,用HDL来描述集成电路的功能和结构,并经过不同级别的验证形成不同级别的IP内核模块,供芯片设计人员装配或集成选用。  

       IP(Intellectual Property)内核模块是一种预先设计好的甚至已经过验证的具有某种确定功能的集成电路、器件或部件。它有几种不同形式。IP内核模块有行为(behavior)、结构(structure)和物理(physical)3级不同程度的设计,对应有主要描述功能行为的“软IP内核(soft IP core)”、完成结构描述的“固IP内核(firm IP core)”和基于物理描述并经过工艺验证的“硬IP内核(hard IP core)”3个层次。这相当于集成电路(器件或部件)的毛坯、半成品和成品的设计技术。  

       软IP内核通常是用某种HDL文本提交用户,它已经过行为级设计优化和功能验证,但其中不含有任何具体的物理信息。据此,用户可以综合出正确的门电路级网表,并可以进行后续结构设计,具有最大的灵活性,可以很容易地借助于EDA综合工具与其他外部逻辑电路结合成一体,根据各种不同的半导体工艺,设计成具有不同性能的器件。可以商品化的软IP内核一般电路结构总门数都在5000门以上。但是,如果后续设计不当,有可能导致整个结果失败。软IP内核又称作虚拟器件。  

       硬IP内核是基于某种半导体工艺的物理设计,已有固定的拓扑布局和具体工艺,并已经过工艺验证,具有可保证的性能。其提供给用户的形式是电路物理结构掩模版图和全套工艺文件,是可以拿来就用的全套技术。  

       固IP内核的设计深度则是介于软IP内核和硬IP内核之间,除了完成硬IP内核所有的设计外,还完成了门电路级综合和时序仿真等设计环节。一般以门电路级网表形式提交用户使用。  

       TI,Philips和Atmel等厂商就是通过Intel授权,用其MCS51的IP内核模块结合自己的特长开发出有个性的与Intel MCS51兼容的单片机。  

       常用的IP内核模块有各种不同的CPU(32/64位CISC/RISC结构的CPU或8/16位微控制器/单片机,如8051等)、32/64位DSP(如320C30)、DRAM、SRAM、EEPROM、Flashmemory、A/D、D/A、MPEG/JPEG、USB、PCI、标准接口、网络单元、编译器、编码/解码器和模拟器件模块等。丰富的IP内核模块库为快速地设计专用集成电路和单片系统以及尽快占领市场提供了基本保证。  

       软件技术的进步,特别是嵌入式实时操作系统EOS(Embedded Operation System)的推出,为开发复杂嵌入式系统应用软件提供了底层支持和高效率开发平台。EOS是一种功能强大、应用广泛的实时多任务系统软件。它一般都具有操作系统所具有的各种系统资源管理功能,用户可以通过应用程序接口API调用函数形式来实现各种资源管理。用户程序可以在EOS的基础上开发并运行。它与通用系统机中的OS相比,主要有系统内核短小精悍、开销小、实时性强和可靠性高等特点。完善的EOS还提供各种设备的驱动程序。为了适应网络应用和Internet应用。还可以提供TCP/IP协议支持。目前流行的EOS有3Com公司的Palm OS、Microsoft公司的Windows CE和Windows NT Embedded4.0、日本东京大学的Tron和各种开放源代码的嵌入式Linux以及国内开发成功的凯思集团的Hopen OS和浙江大学的HBOS。  

       二、嵌入式系统设计方法的变化  

       过去擅长于软件设计的编程人员一般对硬件电路设计“敬而远之”,硬件设计和软件设计被认为是性质完全不同的技术。

       随着电子信息技术的发展,电子工程出身的设计人员,往往还逐步涉足软件编程。其主要形式是通过微控制器(国内习惯称作单片机)的应用,学会相应的汇编语言编程。在设计规模更大的集散控制系统时,必然要用到已普及的PC机,以其为上端机,从而进一步学习使用Quick BASIC,C,C++,VC和VB等高级语言编程作系统程序,设计系统界面,通过与单片机控制的前端机进行多机通信构成集中分布控制系统。

       软件编程出身的设计人员则很少有兴趣去学习应用电路设计。但是,随着计算机技术的飞速发展,特别是硬件描述语言HDL的发明,系统硬件设计方法发生了变化,数字系统的硬件组成及其行为完全可以用HDL来描述和仿真。在这种情况下,设计硬件电路不再是硬件设计工程师的专利,擅长软件编程的设计人员可以借助于HDL工具来描述硬件电路的行为、功能、结构、数据流、信号连接关系和定时关系,设计出满足各种要求的硬件系统。  

       EDA工具允许有两种设计输入工具,分别适应硬件电路设计人员和软件编程人员两种不同背景的需要。让具有硬件背景的设计人员用已习惯的原理图输入方式,而让具有软件背景的设计人员用硬件描述语言输入方式。由于用HDL描述进行输入,因而与系统行为描述更接近,且更便于综合、时域传递和修改,还能建立独立于工艺的设计文件,所以,擅长软件编程的人一旦掌握了HDL和一些必要的硬件知识,往往可以比习惯于传统设计的工程师设计出更好的硬件电路和系统。所以,习惯于传统设计的工程师应该学会用HDL来描述和编程。  

       三、嵌入式系统设计的3个层次  

       嵌入式系统设计有3个不同层次:  

       1. 第1层次:以PCB CAD软件和ICE为主要工具的设计方法。  

       这是过去直至现在我国单片机应用系统设计人员一直沿用的方法,其步骤是先抽象后具体。  

       抽象设计主要是根据嵌入式应用系统要实现的功能要求,对系统功能细化,分成若干功能模块,画出系统功能框图,再对功能模块进行硬件和软件功能实现的分配。  

       具体设计包括硬件设计和软件设计。硬件设计主要是根据性能参数要求对各功能模块所需要使用的元器件进行选择和组合,其选择的基本原则就是市场上可以购买到的性价比最高的通用元器件。必要时,须分别对各个没有把握的部分进行搭试、功能检验和性能测试,从模块到系统找到相对优化的方案,画出电路原理图。硬件设计的关键一步就是利用印制板(PCB)计算机辅助设计(CAD)软件对系统的元器件进行布局和布线,接着是印制板加工、装配和硬件调试。  

       工作量最大的部分是软件设计。软件设计贯穿整个系统的设计过程,主要包括任务分析、资源分配、模块划分、流程设计和细化、编码调试等。软件设计的工作量主要集中在程序调试,所以软件调试工具就是关键。最常用和最有效的工具是在线仿真器(ICE)。  

       2. 第2层次:以EDA工具软件和EOS为开发平台的设计方法。  

       随着微电子工艺技术的发展,各种通用的可编程半定制逻辑器件应运而生。在硬件设计时,设计师可以利用这些半定制器件,逐步把原先要通过印制板线路互连的若干标准逻辑器件自制成专用集成电路(ASIC)使用,这样,就把印制板布局和布线的复杂性转换成半定制器件内配置的复杂性。然而,半定制器件的设计并不需要设计人员有半导体工艺和片内集成电路布局和布线的知识和经验。随着半定制器件的规模越来越大,可集成的器件越来越多,使印制板上互连器件的线路、装配和调试费用越来越少,不仅大大减少了印制板的面积和接插件的数量,降低了系统综合成本,增加了可编程应用的灵活性,更重要的是降低了系统功耗,提高了系统工作速度,大大提高了系统的可靠性和安全性。  

       这样,硬件设计人员从过去选择和使用标准通用集成电路器件,逐步转向自己设计和制作部分专用的集成电路器件,而这些技术是由各种EDA工具软件提供支持的。  

       半定制逻辑器件经历了可编程逻辑阵列PLA、可编程阵列逻辑PAL、通用阵列逻辑GAL、复杂可编程逻辑器件CPLD和现场可编程门阵列FPGA的发展过程。其趋势是集成度和速度不断提高,功能不断增强,结构趋于更合理,使用变得更灵活和方便。  

       设计人员可以利用各种EDA工具和标准的CPLD和FPGA等,设计和自制用户专用的大规模集成电路。然后再通过自下而上的设计方法,把用半定制器件设计自制的集成电路、可编程外围器件、所选择的ASIC与嵌入式微处理器或微控制器在印制板上布局、布线构成系统。  

       3. 第3层次:以IP内核库为设计基础,用软硬件协同设计技术的设计方法。  

       20世纪90年代后,进一步开始了从“集成电路”级设计不断转向“集成系统”级设计。目前已进入单片系统SOC(System o-n a chip)设计阶段,并开始进入实用阶段。这种设计方法不是把系统所需要用到的所有集成电路简单地二次集成到1个芯片上,如果这样实现单片系统,是不可能达到单片系统所要求的高密度、高速度、高性能、小体积、低电压、低功耗等指标的,特别是低功耗要求。单片系统设计要从整个系统性能要求出发,把微处理器、模型算法、芯片结构、外围器件各层次电路直至器件的设计紧密结合起来,并通过建立在全新理念上的系统软件和硬件的协同设计,在单个芯片上完成整个系统的功能。有时也可能把系统做在几个芯片上。因为,实际上并不是所有的系统都能在一个芯片上实现的;还可能因为实现某种单片系统的工艺成本太高,以至于失去商业价值。目前,进入实用的单片系统还属简单的单片系统,如智能IC卡等。但几个著名的半导体厂商正在紧锣密鼓地研制和开发像单片PC这样的复杂单片系统。  

       单片系统的设计如果从零开始,这既不现实也无必要。因为除了设计不成熟、未经过时间考验,其系统性能和质量得不到保证外,还会因为设计周期太长而失去商业价值。

       为了加快单片系统设计周期和提高系统的可靠性,目前最有效的一个途径就是通过授权,使用成熟优化的IP内核模块来进行设计集成和二次开发,利用胶粘逻辑技术GLT(Glue Logic Technology),把这些IP内核模块嵌入到SOC中。IP内核模块是单片系统设计
头像被屏蔽

出0入0汤圆

发表于 2011-8-9 17:47:28 | 显示全部楼层
回复【30楼】tmfwt  飞飞
-----------------------------------------------------------------------
呃,代码工表示看datasheet很吃力=.=

出0入0汤圆

发表于 2011-8-9 19:27:37 | 显示全部楼层
KEIL MDK,IAR EWARM等软件下有很多例程,可以看看。
还有网上有老周的板子资料。

只是个单片机。

出0入0汤圆

发表于 2011-10-22 10:51:37 | 显示全部楼层
此贴相见恨晚,我也刚学LPC1768

出0入0汤圆

发表于 2011-10-22 18:32:43 | 显示全部楼层
顶!

出0入0汤圆

发表于 2011-10-31 23:16:43 | 显示全部楼层
mark !mark!

出0入0汤圆

发表于 2011-11-4 14:05:45 | 显示全部楼层
mark  调试SPI不正常

出0入0汤圆

发表于 2011-11-6 18:51:35 | 显示全部楼层
很多人学啊。

出0入0汤圆

发表于 2011-11-7 13:14:55 | 显示全部楼层
值得学习

出0入0汤圆

发表于 2011-11-8 17:33:36 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-8 18:45:47 | 显示全部楼层
正需要  lpc1768

出0入8汤圆

发表于 2011-11-8 19:34:21 | 显示全部楼层
lpc的价格比stm的贵好多啊!  学stm32的人就很多啦!!

出0入0汤圆

发表于 2011-11-8 19:43:25 | 显示全部楼层
弄LPC1768很久了。感觉不错,这个标题很大啊!

出0入0汤圆

发表于 2011-11-8 20:08:32 | 显示全部楼层
总是要支持一下

出0入0汤圆

发表于 2011-11-8 21:19:10 | 显示全部楼层
楼主能提供CF卡在1768上的驱动吗,谢谢!

出0入0汤圆

发表于 2011-11-10 09:36:44 | 显示全部楼层
楼主,能留下qq么,方便交流一下。

出0入0汤圆

发表于 2011-11-11 17:01:40 | 显示全部楼层
路过。

出0入0汤圆

发表于 2011-11-17 15:51:51 | 显示全部楼层
正在学习LPC11C14,路过

出0入0汤圆

发表于 2011-11-17 15:57:05 | 显示全部楼层
那我卖LPC1768怎么办,换STM32卖,呵呵,不过我是喜欢NXP的片子

出0入0汤圆

发表于 2011-11-18 16:57:14 | 显示全部楼层
nxp

出0入0汤圆

发表于 2011-11-20 09:52:29 | 显示全部楼层
回复【49楼】qinxiaotang519
-----------------------------------------------------------------------

换LPC11C24吧,带CAN驱动器

出0入0汤圆

发表于 2011-11-28 01:34:01 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-1 12:51:42 | 显示全部楼层
stm32的开发板貌似便宜些

出0入0汤圆

发表于 2011-12-1 13:05:20 | 显示全部楼层
mm

出0入0汤圆

发表于 2011-12-31 16:07:49 | 显示全部楼层
MARK!研究中!

出0入0汤圆

发表于 2011-12-31 16:45:16 | 显示全部楼层
LPC的CM3不错,用起来比ST的爽,ST的说明书,写得太浪曼了

出0入0汤圆

发表于 2012-1-19 13:53:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-1-19 16:20:23 | 显示全部楼层
支持哦。

能提供更多的文档共享么?

出0入0汤圆

发表于 2012-1-19 20:29:55 | 显示全部楼层
nxp的cm3比st的好用,就是贵了点

出0入0汤圆

发表于 2012-2-7 20:43:05 | 显示全部楼层
正在学1768,急需这方面的资料及交流,楼主大大滴好人吖,O(∩_∩)O~

出0入0汤圆

发表于 2012-2-11 12:30:43 | 显示全部楼层
mark  nxp

出0入0汤圆

发表于 2012-2-11 12:57:26 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-2-16 17:23:52 | 显示全部楼层
回复【楼主位】pyy2010 阿帅
-----------------------------------------------------------------------

我也用lpv1768 ,GPS GPRS,....

出0入0汤圆

发表于 2012-2-23 13:11:22 | 显示全部楼层
回复【66楼】liker292
-----------------------------------------------------------------------
我也用lpc1768 ,GPS GPRS,....

出0入0汤圆

发表于 2012-4-28 19:30:32 | 显示全部楼层
是啊,好多人在学习,只是大家缺少交流的平台,总算有了。

出0入0汤圆

发表于 2012-4-30 13:59:16 | 显示全部楼层
2011年7月的时候  玩CM3的人少吗?  

出0入0汤圆

发表于 2012-5-3 18:17:37 | 显示全部楼层
你好啊,我想下载您发的资料,可是论坛上却不能下载了,麻烦您能传给我吗,我有些是809656875@qq.com,万分感谢。

出0入0汤圆

发表于 2012-5-3 18:20:12 | 显示全部楼层
急求啊,那位好心人能给点lpc1768的资料啊,万分感谢,我邮箱是809656875@qq.com

出0入0汤圆

发表于 2013-10-16 09:48:45 | 显示全部楼层
1768,前来报到啊。。

出0入0汤圆

发表于 2013-10-16 10:02:54 | 显示全部楼层
不知所云

出0入0汤圆

发表于 2014-6-7 15:14:58 | 显示全部楼层
mark mark mark

出0入0汤圆

发表于 2014-6-8 17:31:15 | 显示全部楼层
我也在用LPC1768,围观楼主

出0入0汤圆

发表于 2014-6-10 08:10:29 | 显示全部楼层
搞LPC23XX的还要少。。资料也少。。。。初学很吃力啊!

出0入0汤圆

发表于 2014-6-10 08:38:04 | 显示全部楼层
谢谢楼主

顺便说下,ZLG他们网站有NXP的资料,应该值得借鉴

出0入0汤圆

发表于 2014-7-2 16:52:51 | 显示全部楼层
有没有人用1768以太网下面做一个简单交换机的应用啊?

出0入0汤圆

发表于 2015-8-19 00:53:12 | 显示全部楼层
正准备入手LPC

出0入0汤圆

发表于 2015-8-19 06:01:06 | 显示全部楼层
我也正在学习中

出0入0汤圆

发表于 2015-8-20 10:44:04 来自手机 | 显示全部楼层
STM32便宜又好用,LPC还是有点高。

出0入0汤圆

发表于 2015-9-9 22:15:56 | 显示全部楼层
LPC 1768 资料很多,淘宝上的开发板也是一大堆,我当时是用ZLG的1766开发板学的,配套2本ZLG翻的中文DATASHEET。现在回头看,LPC还是挺好学的,上手非常快,寄存器结构合理,定义清晰,比很多MCU都要好。举个最简单例子,LPC有引脚功能选择寄存器,要用什么功能配下引脚功能寄存器再使能对应外设就可以。其他的MCU很多配置方法,有的用个GPIO还要把其他复用的功能全关掉,本末倒置。还有就是NXP的I2C,用过才知道好……
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 16:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表