打印

【PSoC@4学习】自2013年7月PSoC@4菜鸟学习之路。。持续更新中

[复制链接]
8614|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
     本人从2013年6月底开始接触PSoC@4,期间不断与这方面领域的大神学习,目前虽然还是有点菜鸟,但是借此机会来给大家分享我的PSoC@4学习之路。。
    首先简单介绍下PSoC@4赛普拉斯PSoC 4架构可面向嵌入式设计提供业界最灵活、最低功耗的ARM®Cortex™-M0器件

  真正可扩展、可无限重配置的架构,采用组件设计方法,必将对8位、16位和32位独立式MCU发起挑。2013年3月20日,加州圣何塞讯——赛普拉斯半导体公司(纳斯达克股票代码:CY)日前宣布推出PSoC® 4可编程片上系统架构,它将赛普拉斯一流的PSoC模拟和数字架构以及业界领先的CapSense®电容式触摸技术同ARM®的低功耗Cortex™-M0内核完美相结合。这款真正可扩展的低成本架构可提供PSoC标志性的高灵活性、模拟性能和高集成度,而且能提供数十种免费的PSoC组件(Components™),也就是在赛普拉斯PSoC Creator™集成设计环境中用图标代表的“虚拟芯片”。全新PSoC 4器件系列将对专有的8位和16位微控制器(MCU)以及其它32位器件发起挑战。赛普拉斯计划在2013年上半年宣布推出新的PSoC 4系列产品。PSoC 4架构在抗噪性方面拥有巨大的领先优势,可有效加强赛普拉斯已获专利的业界领先的CapSense电容式触摸传感技术。除了电容式传感以外,PSoC 4还可面向FOC(磁场定向控制)电机控制、温度传感、安全访问、便携式医疗和众多其它应用领域。如欲了解更多详情,敬请访问:www.cypress.com/go/psoc4

  赛普拉斯可编程系统业务部负责PSoC市场营销的高级总监John Weil指出:“PSoC 4能帮助设计工程师充分发挥业界标准的低成本ARM解决方案、丰富的ARM软件以及将8位和16位MCU应用移植到32位解决方案等整体趋势带来的优势。这是业界唯一一款完全可扩展、可无限重配置、具有同类最佳模拟集成度的Cortex-M级MCU。它能替代整个专有MCU和模拟解决方案产品系列,有望占据大量市场份额。”

  半导体市场研究公司Objective Analysis的首席分析师Tom Starnes指出:“赛普拉斯PSoC产品在高度可定制的逻辑和模拟电路上采用深受欢迎的Cortex-M0处理器内核,可为具有独特I/O要求的应用提供极具吸引力的组合,其能确保提供更高性能的处理器或者广泛采用的ARM架构。PSoC 4架构采用高度优化的Cortex-M0处理器,这种调整可以更方便从8位和16位或专有MCU架构上进行移植。”

  PSoC 4架构可实现同类最佳的功耗(仅为150 nA)同时可保持SRAM存储器、可编程逻辑工作,可从中断唤醒。在停止模式(stop mode)下,其保持唤醒功能时耗电仅为20 nA。它拥有任何Cortex-M0器件最宽的工作电压范围,能支持介于1.71V到5.5V之间的全部模拟和数字工作电压。此外,该架构还支持集成高性能定制信号链,并能提供可配置模拟和灵活的路由功能。

  PSoC 4采用PSoC Creator集成设计环境。IDE易于使用的图形界面能帮助设计人员在同一PSoC器件中拖放预先具有自身特性、可随时投产的模拟和数字IP模块,也就是PSoC组件,从而创建出特性丰富、高度差异化的可定制最终产品。赛普拉斯的平台解决方案,包括PSoC 4、PSoC Creator和PSoC组件等,不仅可简化并加速设计工作,减少物料清单成本,还可带来出色的系统价值。

  MCU不能,而PSoC能!

  PSoC解决方案可为嵌入式设计带来相当于现场可编程ASIC的闪存器件,而且没有生产周期或一次性工程费用(NRE)方面的影响。PSoC将可配置的模拟和数字电路以及片上微控制器紧密集成,不仅能减少组件数量,还可简化修订工作。仅单个PSoC器件就能集成多达100种外设功能,从而可帮助客户加快设计周期、提高质量,同时还能减少板卡空间、降低功耗和系统成本。

  PSoC能保证设计方案充分满足未来需求,避免最后时刻的技术规格变动造成巨大影响。此外,它还能支持在设计过程中任何时间点上进行固件修改,即便在产品现场使用阶段也能修改固件。所有PSoC器件均可支持动态重配置,从而使设计人员能即时修改资源,并利用更少的IC来完成任务。

    开启我的PSoC@4学习之路。。首先上图。。。我买的PSoC@4 开发板。

                                总体包装

                       拆开后的包装

                        正面

                        背面

                        套件
        安装软件就不啰嗦了。。安装好软件后作为一个电子爱好者当然是要玩玩新上手的开发板啦
2 试试例程

    2.1. 点亮我的LED

   
           点亮绿色灯

                点亮绿色灯
2.2自己的第一个工程
    刚一入手的时候着实有些丈二和尚摸不着头脑,习惯与传统的MCU设计方式,对于这个不需要编程来配置外设的PSOC4,用IO口点亮个LED都不知道从何下手。PSOC4几乎都是使用原理图的方式来规划外设和IO口,虽然最终都是通过配置寄存器来实现的,但是寄存器操作的方式并没给用户提供友好的接口,所以使用外设模块编译生成的接口函数式首选方式,即使用一个IO口点亮LED,也要通过原理图来设计。
        IO的输入输出模式很多,高阻输入、上下拉输入、Push-pull输出、OD输出(OD居然还能输出高OD),IO配置是非常灵活的,一般数字功能可以随便映射到某个IO口,任何几个IO口都可以通过ControlRegStatusReg组成一组总线。
例如可以使用ControlReg模块同时控制三个LED
因此可以使用
    uint8 reg=0;
    for(;;)
    {
       Control_Reg_Write(reg++);
        CyDelay(500);
}
来循环显示7中颜色。
我还用PWM模块写了个LED颜色逐渐变化的程序,看起来还算漂亮,分享一下:
原理图:
主要代码:
void main()
{
    int red=65535, green=65535, blue=65535;
    uint8 r=0, g=0, b=0;

    Clock_1_Start();
    PWM_1_Start();
    PWM_2_Start();
    PWM_1_WriteCompare1(65535);
    PWM_1_WriteCompare2(65535);
    PWM_2_WriteCompare1(65535);
    for(;;)
    {
       if (r)
       {
           red += 30;
           if (red > 65535){ red = 65535; r = 0; }
       }
       else
       {
           red -= 30;
           if (red < 0) { red = 0; r = 1;}
       }
       if (g)
       {
           green += 20;
           if (green > 65535){ green = 65535; g = 0; }
       }
       else
       {
           green -= 20;
           if (green < 32768) { green = 32768; g = 1;}
       }
       if (b)
       {
           blue += 10;
           if (blue > 65535){ blue = 65535; b = 0; }
       }
       else
       {
           blue -= 10;
           if (blue < 32768) { blue = 32768; b = 1;}
       }
       CyDelay(1);
       PWM_1_WriteCompare1(red);
       PWM_1_WriteCompare2(green);
       PWM_2_WriteCompare1(blue);
    }
}
@


评分
参与人数 1威望 +1 收起 理由
贝多芬的悲伤 + 1 很给力!
沙发
陌路绝途|  楼主 | 2014-6-3 14:31 | 只看该作者
本帖最后由 陌路绝途 于 2014-6-3 19:15 编辑


实验室有个8通道24M的逻辑分析仪,查看控制卡的输出信号。也是生平自己第一次使用逻辑分析仪。逻辑分析仪这的是作为一个电子技术人员的好工具,用这个玩了下PSoc 4效果不错  嘿嘿
上个从控制器上扑捉的信号时序图:

有时序图我们可以看到信号线的基本功能:
CLK 时钟输出
OE  输出使能
STB 所存使能
ABCD  行信号选择  可以通过ABCD的值确定扫描那一行
G0和没有采集的G1、R1、R0、B1、B0都是数据输出信号
刚开始写一个小的程序,通过软件模拟一个控制这个时序,刚开始入手,从简单开始嘛。
首先就是放端口:


然后就是编译硬件电路和生成软件文件,编写的程序有点简单:
#include <device.h>

int main()
{
    unsigned char i=0,j=0,b=0;
    GREEN_2_Write(0);RED_2_Write(0);BLUE_2_Write(0);//最好在这里初始化一下   要不然会花屏的。
    RED_1_Write(0);GREEN_1_Write(0);BLUE_1_Write(0);
        for(;;)
    {  
       for(i=0;i<16u;i++)//16行扫描
           {  
                  for(j=0;j<32;j++)//行数据
                  {
                        b=j%3;//在这里实现的功能就是每一列只显示一种颜色顺序分别是红、绿、蓝
                        if(b==0)
                        {
                                RED_1_Write(1);GREEN_1_Write(0);BLUE_1_Write(0);
                                RED_2_Write(1);GREEN_2_Write(0);BLUE_2_Write(0);
                        }
                        else
                          if(b==1)
                          {
                                RED_1_Write(0);GREEN_1_Write(1);BLUE_1_Write(0);
                                RED_2_Write(0);GREEN_2_Write(1);BLUE_2_Write(0);
                          }
                        else
                        {
                                RED_1_Write(0);GREEN_1_Write(0);BLUE_1_Write(1);
                                RED_2_Write(0);GREEN_2_Write(0);BLUE_2_Write(1);
                        }
                        CLK_Write(1);
                        CLK_Write(0);
                  }
                  OE_Write(1);
                  Sec_Write(i);//选择那一行
                  STB_Write(1);//锁存数据信号
                  STB_Write(0);
                  OE_Write(0); //输出使能
        }
  }
}
最后就是编译、下载、看结果:
最后编译信息如下:
Flash used: 2430 of 32768 bytes (7.4%).
SRAM used: 1532 of 4096 bytes (37.4%).



使用特权

评论回复
板凳
陌路绝途|  楼主 | 2014-6-3 14:32 | 只看该作者
本帖最后由 陌路绝途 于 2014-6-4 19:48 编辑

占楼备用  


PSoc@4 之液晶驱动







程序如下
/*========================================
*
* Copyright YOUR COMPANY, THE YEAR
* All Rights Reserved
* UNPUBLISHED, LICENSED SOFTWARE.
*
* CONFIDENTIAL AND PROPRIETARY INFORMATION
* WHICH IS THE PROPERTY OF your company.
*
* ========================================
*/
#include <project.h>

volatile     uint32_t  ultick=0;

void         isr_timer(void)
{
           ultick++;  
}



uint32_t     get_tick(void)
{

           return ultick;   
}



void       delayms(uint32_t ms)
{
           uint32_t oldtick = get_tick();
           while(get_tick()-oldtick<ms);

}















int main()
{
    /* Placeyour initialization/startup code here (e.g. MyInst_Start()) */

    isr_timer_StartEx(isr_timer);
    Timer_Start();
    CyGlobalIntEnable;  /* Uncommentthis line to enable global interrupts. */
    LCD_Seg_Start();

    LCD_Seg_ClearDisplay();
    LCD_Seg_Write7SegDigit_0(0x1,3);
    LCD_Seg_Write7SegDigit_0(0x2,2);
    LCD_Seg_Write7SegDigit_0(0x3,1);
    LCD_Seg_Write7SegDigit_0(0x4,0);
    for(;;)
    {


       led_Write(0);
       delayms(250);
       led_Write(1);


       delayms(250);
    }
}

效果图:

使用特权

评论回复
地板
陌路绝途|  楼主 | 2014-6-4 08:58 | 只看该作者
本帖最后由 陌路绝途 于 2014-6-10 09:31 编辑



PCos4软件简单使用
1.1      实验目的
1)        创建项目
2)        代码编写(编写一个LED三色灯闪烁的例程)
3)        在线仿真
4)        跟一般的MCU对比功能和性能
1.2      实验总结
1)        在这个例程的应用中,项目的创建是比较简单,容易的。这个得益于这个PSOC CREATOR的软件平台。如果从这个实验来评价,这个芯片只是一个M0的处理器,如果从使用的角度来评价,过多的软件设置反而显得有些复杂和繁琐。软件提供了很多的参数和功能设置界面,其实这些都是可以通过代码来配置寄存器来实现的(实验内容会说明),所以这些设置界面基本上是用于系统初始化时使用,程序运行过程中,我们还是需要去了解功能寄存器的意义。
2)        软件本身就带编译和仿真功能,这个是很好的,很方便的。
3)        这个实验比较简单,能够体现的就是对于入门是比较方便的,而且是一个很好的就教学工具,我们选择功能和配置管脚等流程的时候,我们很容易而且很清晰的感觉到每个模块的结构和原理,项目的创建过程就好像是我们堆砌积木一样。
1.3      实验内容1.3.1   创建项目文档
打开软件CREATOR2.2。然后在菜单栏选>>File>>New>>Project进入项目界面
我们可以直接选择图中红色框的选项,创建一个全新的项目。另外,我们还可以选择蓝色框中的选项,这些选项可以让我们直接生成对应的完整的项目。我们可以把这些项目作为例程学习。
我们创建了全新的项目后,软件就已经给我们生成了相关的文件夹和文件。

用于添加和配置功能模块,端口(文件1
用于设置管脚,类似FPGA的分配管脚(文件2
Main.c,主函数文件,按照一般的MCU编程
每个功能模块或者是端口都有对应的配置文件夹和配置文件,有时间读一下,发觉这就是对应的头文件,配置和功能函数。

然后我们双击文件1TOPDESIGN.CYSCH,从文件名来看,就已经有点像我们用PROTEL来做硬件电路板的原理图文件名,其实真的是类似的,如下图
这个项目只需要用到三个管脚来控制各三色的LED,所以我们把“Digital Output Pin”直接拖进工作区就添加成功了。
然后双击刚才添加的PIN,进入对应PIN的配置界面。

接着就是配置管脚号,这个管脚配置就相当于C语言的“sbit PIN_B= P0^2”,但在这里我们就是通过下拉菜单选择完成。双击文件二(led.cydwr),按照表中的参数修改就可以了。
到这个位置,配置M0的环节就完成了,或者说我们已经生产了一个M0,后面通过菜单栏的BUILD>>GENERATE APPLICATION,然后系统就会生成系统中模块需要的文件,剩下的工作就是编写MAIN.C函数。
1.3.2   编写函数
在编写MAIN.C函数前,推荐大家看一下刚才生成的文档,我们现在就拿文件夹《PIN_B》下的PIN_B.C来看一下(文件名跟我们添加的端口或模块是同名的)
PIN_B.C下有几个函数,其中我们要用的就一下这个
void Pin_B_Write(uint8 value)
{
    uint8 drVal = (uint8)(Pin_B_DR & (uint8)(~Pin_B_MASK));
    drVal = (drVal | ((uint8)(value << Pin_B_SHIFT) & Pin_B_MASK));
    Pin_B_DR = (uint32)drVal;
}

上面的硬件生成过程会把我们需要用到的端口函数都准备好了,我们只要懂得使用就是好,所以很方便入门。
MAIN.C函数如下:
void main()
{
    /* Place your initialization/startup code here (e.g. MyInst_Start()) */
    unsigned long i;
    /* CyGlobalIntEnable; */ /* Uncomment this line to enable global interrupts. */
    for(;;)
    {
        /* Place your application code here. */
        Pin_R_Write(0);
        Pin_G_Write(1);
        Pin_B_Write(1);
        for(i=0;i<2000000;i++);

        Pin_R_Write(1);
        Pin_G_Write(0);
        Pin_B_Write(1);        
        for(i=0;i<2000000;i++);        

        Pin_R_Write(1);
        Pin_G_Write(1);
        Pin_B_Write(0);        
        for(i=0;i<2000000;i++);        


    }
}

一个很简单的入门例子就完成了。然后就是编译和下载。
1.3.3   编译下载
     通过菜单栏的BUILD>>BUILD 文件名”或者shift F6编译工程。
     通过菜单栏的DEBUG>>PROGRAM”或者ctrl F5 下载工程。下载完毕,就可以看到开发工具上的三色LED在闪烁了。
1.3.4   仿真
     软件和硬件都支持在线仿真,所以我们可以尝试一下。通过菜单栏的DEBUG>>DEBUG”或者 F5 进入DEBUG。仿真这个环节跟其他的开发工具都是类似的,使用很方便。
1.3.5   使用比较
软件提供了很多配置的界面和功能选项,这些功能都可以让用户非常直观的了解到这个芯片系统的构成,而且很容易上手,这点非常好,更可以说明软件的功能强大。但有的朋友可能比较习惯直接用代码来配置功能,其实都是可以的。现在我们举个例子来说明一下。
文件夹《PIN_B》下的PIN_B.C有这么一段函数,是用来配置端口的模式的
void Pin_B_SetDriveMode(uint8 mode)
{
    SetP4PinDriveMode(Pin_B__0__SHIFT, mode);
}

其实上面的一段代码可以通过软件提供的选项来实现,刚才我们在配置PIN功能的时候有这么一个界面,在这个界面我们也可以配置相同的功能。
所以软件提供的强大的功能,能够方便我们在编程时候了解芯片的性能,在时候的工程中,我们还是需要去了解芯片的内部寄存器和原理。
1.3.6   输入应用
在上面的例子中,有了输出的应用,在这里顺便把按键的输入也一起加入。其他的步骤按照上面的,只要在文件1TOPDESIGN.CYSCH)中再添加一个输入端“Digital input Pin,然后在配置端口号就可以了,这次我们不用软件了配置端口的寄存器,而是直接用软件提供的函数来配置。
把输入端口配置到SW2(P0.7)MAIN.C代码如下
void main()
{
    Pin_1_SetDriveMode(3);         //配置输入端上拉
    Pin_1_Write(1);                 //配置输入端初始化为1
    for(;;)
    {
if(Pin_1_Read())               //读取端口值
       {
       Pin_R_Write(1);             //控制LED的状态
       }
    else
       {
       Pin_R_Write(0);     
       }     
    }
}

使用特权

评论回复
5
xxoo14| | 2014-6-4 13:11 | 只看该作者
楼主没进展了吗?

使用特权

评论回复
6
陌路绝途|  楼主 | 2014-6-9 10:30 | 只看该作者

使用特权

评论回复
7
陌路绝途|  楼主 | 2014-6-9 20:03 | 只看该作者

使用特权

评论回复
8
陌路绝途|  楼主 | 2014-6-10 08:57 | 只看该作者

使用特权

评论回复
9
陌路绝途|  楼主 | 2014-6-10 17:28 | 只看该作者
没人木。。。

使用特权

评论回复
10
陌路绝途|  楼主 | 2014-6-11 14:41 | 只看该作者

使用特权

评论回复
11
陌路绝途|  楼主 | 2014-6-12 09:56 | 只看该作者

使用特权

评论回复
12
陌路绝途|  楼主 | 2014-6-12 17:33 | 只看该作者

使用特权

评论回复
13
kk5290122| | 2014-6-12 19:19 | 只看该作者
lz写的不错啊……

使用特权

评论回复
14
kk5290122| | 2014-6-12 19:19 | 只看该作者
期待lz的更新啊!

使用特权

评论回复
15
陌路绝途|  楼主 | 2014-6-13 08:30 | 只看该作者
kk5290122 发表于 2014-6-12 19:19
lz写的不错啊……

谢谢您的支持

使用特权

评论回复
16
陌路绝途|  楼主 | 2014-6-13 08:31 | 只看该作者
kk5290122 发表于 2014-6-12 19:19
期待lz的更新啊!

这几天比较忙,过几天会更新的。。

使用特权

评论回复
17
陌路绝途|  楼主 | 2014-6-14 19:47 | 只看该作者

使用特权

评论回复
18
贝多芬的悲伤| | 2014-6-14 19:52 | 只看该作者
楼主写的很详细啊。。。

使用特权

评论回复
19
陌路绝途|  楼主 | 2014-6-14 20:00 | 只看该作者
贝多芬的悲伤 发表于 2014-6-14 19:52
楼主写的很详细啊。。。

:D:D:D:D

使用特权

评论回复
20
贝多芬的悲伤| | 2014-6-15 09:30 | 只看该作者
陌路绝途 发表于 2014-6-14 20:00

期待楼主的更新。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

745

帖子

18

粉丝