Kinetis Microcontrollers Knowledge Base

cancel
Showing results for 
Search instead for 
Did you mean: 

Kinetis Microcontrollers Knowledge Base

Discussions

Using five channels from FTM2 module of the KE02 microcontroller included on the FRDM-KE02Z board for controlling a robotic arm powered by five servomotors. Each servomotor is controlled by a couple of buttons of a matrix keyboard, which is connected to eigth GPIOs. Interrupts are not used in this example. The code was generated and compiled on CodeWarrior for Microcontrollers v10.5.
View full article
¡EL GRAN DÍA HA LLEGADO, PARTICIPA Y ELIGE AL MEJOR! T e esperamos en el Centro de Congresos del Tecnológico de Monterrey Campus Guadalajara , la exhibición de los proyectos estará disponible a partir de las 09:00 hrs. Se nombrará al ganador a las 13:00 hrs. En seguida de la premiación de The Freescale Cup . La votación se abrirá a las 9:00hrs. Y se cerrará a las 12:30hrs, se tomarán en cuenta solo las interacciones realizadas dentro de este horario. Vota y califica tu proyecto favorito, sigue 2 pasos: 1. VOTA Elige solo UNA de estas 2 opciones. Ingresa a tu cuenta Twitter Publica el hashtag del proyecto #KinetisChallenge Ingresa al Facebook de Freescale University Programs Encuentra la liga y contesta la encuesta, o si lo prefieres puedes hacerlo desde el siguiente acceso.: https://es.surveymonkey.com/s/JQY76J9 2. CALIFICA Califica cada uno de los proyectos de acuerdo a los criterios de selección. Ingresa a https://apps.facebook.com/ ranktab /rt.php?l=1452 Califica cada proyecto con los 3 criterios. Observa la matriz de burbujas para ver la opinión de los participantes. Comparte tu calificación en tu muro. Se tomarán en cuenta la sumatoria de votos en Twitter y Survey Monkey; así como la calificación en RankTab. ¡LA ELECCIÓN ESTÁ EN TUS MANOS!
View full article
作者 Sam Wang & River Liang 在 RISC 架构的 MCU 中,通常是加载 - 存储( Load and Store )的操作机制,而这种方式不能提供传统 8bit 架构 MCU 的直接位操作内存和地址空间。为此飞思卡尔在 M0+ 系列 MCU 上集成了 BME ( Bit Manipulation Engine )位操作引擎功能,例如 KE 和 KL 系列里都带有 BME ,它从硬件上提供了对外设地址空间用读 - 修改 - 写的操作方式来实现位操作。         使用 BME 能够降低总线的占用率和 CPU 执行时间,这些效果都能够降低系统的功耗。另外使用相比于用 C 语言实现相同功能的代码,使用 BME 能够更节省代码空间。这些可以参照         BME 功能支持访问从 0x4000_0000 开始的,大小为 512K 的地址空间,并把它映射成从 0x4400_0000 到 0x5fff_ffff 的内存空间。         好了,长话短说。下面转入正题,我们应该如何使用 BME 来进行位操作,并达到节省代码空间、提高效率的效果。 一、写操作方式,对定义内容用写的方式来实现与、或、异或、位域插入功能 1 : BME 的 & 操作可以一次对 IO 的几个 bit 清 0     //     0x21<<26 | addr (A0~A19) //GPIOA_PDOR   地址为    400F_F000 #define GPIOA_AND *(( volatile unsigned char *) (0x44000000+0xFF000)) 例 : GPIOA_AND=0xaa; #define GPIOA_AND_I *(( volatile unsigned int *) (0x44000000+0xFF000)) 例 : GPIOA_AND_I=0x55aa; 实际上命令是将 400f_f000 的内容与目标数进行 & 运算。修改 volatile unsigned char, volatile unsigned int, volatile unsigned long 来实现 BME 的所谓 8,16,32 位操作 . 下面命令相同。 2 : BME 的 | 操作可以一次对 IO 的几个 bit 置 1     //       0x22<<26 | addr (A0~A19) #define GPIOA_OR *(( volatile unsigned char *) (0x48000000+0xFF000)) 例 : GPIOA_OR=0xaa; #define GPIOA_OR_I *(( volatile unsigned int *) (0x48000000+0xFF000)) 例 : GPIOA_OR_I=0x55aa; 实际上命令是将 400f_f000 的内容与目标数进行 | 运算。 3 : BME 的 ^ 操作           //     0x23<<26 | addr (A0~A19) #define GPIOA_XOR *(( volatile unsigned char *) (0x4C000000+0xFF000)) 例: GPIOA_XOR=0xaa; #define GPIOA_XOR_I *(( volatile unsigned int *) (0x4C000000+0xFF000)) 例 : GPIOA_XOR_=0x55aa; 上面 3 个例子讲解了一般的与、或、异或等常用操作,下面来点复杂一点的。                                                                                           4 : BME 的位域插入操作 BFI ( Bit Field Insert ) //   (5<<28) | (bit<<23) | (width<<19) | addr (A0~ A18 ) #define BME_BFI_ADDR (ADDR, BIT, WIDTH)   (*( volatile uint32_t *) (((uint32_t) ADDR) | (1<<28) | (BIT<<23) | (WIDTH<<19))) 在这里 bit 是插入的位置,表示被操作目标的最低位开始被操作, Width 这里是插入的数据长度 例: BME_BFI_ADDR(&ADC0_CFG1, 0x05, 0x01) = 0x40; 结果是将寄存器 ADC0_CFG1 从 bit5 开始,用 0x40 的 bit5 来替换 ADC0_CFG1 的 bit5 , 0x40 的 bit6 来替换 ADC0_CFG1 的 bit6 ,调用该命令后,寄存器 ADC0_CFG1_ADIV = 2 相当于执行了 mask = ((1 << (w+1)) - 1) << b;                          // 等一系列位操作。                             (ADC0_CFG1 & ~mask) | (0x40 & mask); 使用 BFI 功能需要注意的是, 操作地址是 A0 到 A18 , 而 GPIO 寄存器的 A0 到 A19 是从 FF000 开始,因此会有 1bit 的地址冲突。为此,在使用 BFI 操作 GPIO 的寄存器时,使用的是内存映射出来的地址空间,此时 GPIO 的起始地址将为 F000 ,如果还使用原来的地址,命令将会无效。之前提到的 AND 、 OR 、 XOR 操作,对于 GPIO 地址空间在 FF000 还是 F000 都适用 #define BME_BFI_GPIOA (BIT, WIDTH)        (*(volatile uint32_t *) ((uint32_t) (5<<28) | (BIT<<23) | (WIDTH<<19) | 0xF000 )) 例: BME_BFI_GPIOA(0,3) = 0x0a; 结果是 GPIO_PDOR 从 bit0 开始,一共 4 位被 1010 替换了。 二、读操作方式 5, BME 的读操作使某位置 1, Load-and-Set 1 Bit// #define PTA1_SET   ( void ) (*(( volatile unsigned char *) (0x4C000000+ (1<<21) + 0xF000))) #define PTA1_SET_I   ( void ) (*(( volatile unsigned int *) (0x4C000000+ (1<<21) + 0xF000))) 例 : PTA1_SET;   // 效果是 GPIOA1 高电平          LAS1      第 1 位     GPIOA_PDOR 地址的 A0-A15 6, BME 的读操作使某位清 0, Load-and-Clear 1 Bit #define PTA2_CLR   ( void ) (*(( volatile unsigned char *) (0x48000000 + (2<<21) + 0xF000))) #define PTA2_CLR_I   ( void ) (*(( volatile unsigned int *) (0x48000000 + (2<<21) + 0xF000))) 例 : PTA2_CLR;     // 效果是 GPIOA2 低电平         LAC1      第 2 位      GPIOA_PDOR 地址的 A0-A15 7, BME 同时提取多个 bit , Unsigned Bit Field Extract 前 8 位内                      //UBFX      第 1 位开始        取 1+1 位    GPIOA_PDOR 地址的 A0-A18 #define PTA_OUT    *(( volatile unsigned char *) (0x50000000+ (1<<23) + (1<<19) + 0xF000)) 前 16 位内                    //UBFX      第 1 位开始        取 1+1 位    GPIOA_PDOR 地址的 A0-A18 #define PTA_OUT_I    *(( volatile unsigned int *) (0x50000000+ (1<<23) + (1<<19) + 0xF000)) 例 : 初始值 GPIO_PDOR = 0x3a;   //            11_1010   temp = PTA_OUT; //                    此时 temp = 0x01 例 : 初始值 GPIO_PDOR = 0x35;   //            11_0101   temp = PTA_OUT; //                    此时 temp = 0x02 该宏定义 UBFX 功能是将 GPIO_PDOR 从 bit1 开始提取 1+1 位,并以 bit1 为最低位赋值到目标变量。          需要注意的是 UBFX 与 BFI 一样操作的都是映射内存空间,用来操作 GPIO 时要以 F000 为起始地址。         BME 执行的是读 - 修改 - 写操作,而我们很多寄存器有些位是 w1c ,也就是所谓的 write-1-clear ,写 1 清 0 的工作方式。使用 BME 时就需要特别注意和小心了,否则会出现很多不可预料的后果。                如果一个寄存器中有多个连续的 W1C 位,我们就不要使用 LAS1 来对寄存器写 1 清 0 了,因为在 LAS1 这个操作中,其中有一步操作是将数据读回(在 reference manual 中有 read data return to core 一说 )。 这一步会将原本不需要清 0 的位给清了。         下面介绍这个情况的实验。 在我们 M0+ 的 PWM 模块中,寄存器 TPM0_STATUS 所有有效位都为 w1c ,我们模拟一个情景: 系统 48MHz , TPM 时钟 128 分频, TPM0 定时中断计数器最大值为 37499 ,并使能溢出中断。 通道 0 设置为 output compare 模式的 match output low ,比较值为 10000 ,不触发中断。 通道 1 设置为 output compare 模式的 match output high ,比较值为 20000 ,不触发中断。 上面的设置可以使我们每 50ms 进入一次中断,需要我们在中断服务程序中清中断标志。 TPM0_STATUS 地址为 0x4003_8050 中断函数中设置断点观察 TPM0_STATUS 的值,为 1_0000_0011 B #define TPM0_STATUS_LAS1   ( void ) (*(( volatile unsigned int *) (0x4C000000| (1<<21) | 0x38050))) 中断程序中用 TPM0_STSTUS_LAS1 将 bit1 置 1 清 0 ,得到的结果是 TPM0_STATUS = 0 ,使用 LAS1 作用在该寄存器的其他位结果都一样。将其他不需要改动的位都清 0 了。     我们换种方式。 #define TPM0_ STSTUS_BFI *(( volatile unsigned int *) (0x50000000 | (0<<23) | (8<<19) | 0x38050)) =0x001 中断里用 BFI 去修改该连续的 w1c 位,从 bit0 开始,长度为 8+1 位,执行 TPM0_STSTUS_BFI 后 bit8 和 bit2 仍为 1 , bit0 已经被清 0 了。这确实是我们想要的效果。         此后我们遇上一个寄存器有多个连续 w1c 时,可以使用 BFI 的方式来改写寄存器 w1c 位的值,而位判断则采用 UBFX 的方式来提取该位域。 下面是针对比较器的 CMP0_SCR 寄存器操作的例程 . CMP0_SCR 是 8bit 的寄存器 bit1 和 bit2 是 w1c #define CMP_SCR_CFR_CLR *(( volatile unsigned char *) (0x50000000+ (1<<23) + (1<<19) + 0x73003)) =4 #define CMP_SCR_CFF_CLR *(( volatile unsigned char *) (0x50000000 + (1<<23) + (1<<19) +0x73003)) =2              //           BFI                    第一位开始    1+1 位           2 对应 bit2bit1 为 01          4 对应 bit2bit1 为 10 #define CMP_SCR_CFR    *(( volatile unsigned char *) (0x50000000 + (2<<23) + (0<<19) + 0x73003)) #define CMP_SCR_CFF    *(( volatile unsigned char *) (0x50000000 + (1<<23) + (0<<19) + 0x73003))             //            UBFX                分别是提取 bit2 和 bit1 的值 void CMP_Change ( void ) { If (CMP_SCR_CFR) { CMP_SCR_CFR_CLR; }                   If (CMP_SCR_CFF) { CMP_SCR_CFF_CLR; } }         总结, BME 功能可以有效提高 M0+ 的位操作性能并减少代码占用空间,但用于处理 w1c 位时要特别小心,总的来说 BME 是个好东西,在内核资源紧张的时候可以给用户提供一个精简代码的手段。
View full article
在电机控制, Audio 等很多应用中,我们经常会用到一些常见的正余弦,矩阵变换, FFT 等一些 DSP 函数,提到 DSP 库,通常会想到使用 ARM 公司提供的 CMSIS 库。 CMSIS 库是 ARM 和一些半导体厂家针对 Cortex-M 系列制定的一套接口标准,包括针对内核操作的 CMSIS-CORE API ,针对 DSP 应用的 CMSIS-DSP Library ,针对 RTOS 的 CMSIS-RTOS API ,与外设接口的 CMSIS-SVD 以及提供 Debug 访问接口的 CMSIS-DAP 。 其中,又以 DSP 应用的 CMSIS-DSP 库的应用最为广泛。针对 Cortex-M4 中的 DSP 功能, CMSIS-DSP 部分提供了超过 60 多种功能的 DSP 算法库,尤其是随着 Cortex-M4 中集成了 FPU 硬件单元, CMSIS-DSP 库的应用也越来越广泛。 在 KEIL 和 IAR 中都集成了对 CMSIS 的支持,然而在 CodeWarrior 中没有直接支持 CMSIS ,需要用户移植到自己的 CW 工程中,所以就需要使用者了解 CMSIS 的结构,手动添加库文件和头文件,并完成一些重要的编译参数配置。特别是有些芯片支持 FPU 浮点运算单元,有些不支持,在配置选项上差别很大。在飞思卡尔 Kinetis 系列芯片中, FPU 浮点运算单元也是一个可选的部件,只有在名称中带有 FN 和 FX 的芯片才支持 FPU 硬件浮点功能,如 MK60FN1M0, MK60FX512 。本文档分别介绍在使用和不使用 FPU 的情况下如何一步步移植 CMSIS 的 DSP 库到自己的 CodeWarrior 工程中。 需要注意的是 FPU 单元是指的芯片上的一个独立于 CPU 处理的浮点运算单元,整个单元在大多数厂家的芯片中都是可以被使能和关闭的。相对于芯片,编译器也设置了相应的 FPU 功能开启 / 关闭的选项,在编译时需要告诉编译器是否开启 FPU 功能。编译器一旦开启 FPU 功能,在处理单精度浮点运算的语句时就会用带 V- 开头的汇编指令进行编译。如果编译器使能了 FPU 功能,而芯片未开启 FPU 单元,程序运行到浮点语句时就会出现异常。相反,如果编译器未使能 FPU 功能,芯片即使开启了 FPU 单元,程序还是会按照未使能 FPU 的代码进行处理。在本例程中,为对比分析是否采用 FPU 的编译指令差别以及在板的执行效率,选用 Kinetis K70FN1M 为实验对象。 硬件平台: TWR-K70F120M 核心板       软件环境: CodeWarrior v10.5        CMSIS版本 :V3.2 一. 准备工作: 下载 CMSIS 的库,当前最新的版本为 V3.2 ,解压后名称为 CMSIS-SP-00300-r3p2-00rel1 ,其目录结构如下图。分别包含 CMSIS-DSP, CMSIS-RTOS 和 CMSIS-SVD 的库文件。在本 Cortex M4 的 CMSIS-DSP 的应用中,真正用到的文件包括 CMSIS\Include 中 CM4 相关的头文件, CMSIS\Lib\GCC文件夹中的库文件libarm_cortexM4l_math.a( 软浮点 ) 和 libarm_cortexM4lf_math.a( 硬浮点 ) ,以及 Device\ARM\ARMCM4\include 中外设访问相关的两个头文件。 二. 不使用 K70 的 FPU 浮点运算单元,移植 CMSIS 的 DSP 库到 CW 的步骤;      Step 1:    新建一个 Baremental 的工程,选择器件器件 MK70FN1M0 (支持硬件 FPU );     Step 2:    选择 Floating Point 浮点运算实现的类型,即指定编译器将 C 代码编译成汇编代码时使用的规则; 在 Floating Point 四个选项含义如下: Software 选项:表示不使用 FPU 硬件,而是使用 GCC 的整数算术运算来模拟浮点运算; Handware(-mfloat –abi=hard) 选项:表示使用 FPU 硬件来进行浮点运算,函数的参数直接传递到 FPU 的寄存器 (s0-d0) 中; Handware(-mfloat –abi=softfp) 选项:表示使用 FPU 硬件来进行浮点运算,但是函数的参数传递到整数寄存器 (r0-r3 )中,然后再传递到 FPU 中; Handware(-mfloat –abi=softfp –fshort -double) 选项:其配置项同上,只不过使能了 fshort  double 功能,并且此处的 double 数据的宽度等同于 float ; 有兴趣研究各个选项意义的可以参考 CW for MCU 技术文档 的第 3 章,在本例程中使用的是软浮点,所以选择 Software 项。需要注意的是:此配置选项仅出现支持 FPU 硬件单元的芯片工程中,如 MK60FN1M0, MK60FX512 等,否则默认没有此选项,默认为软件浮点。 Step 3:    点击“ Next ”进入下图,选择使用 Processor Expert ,点击“ Finish “完成工程的建立; Step 4:    进入当前工程的文件夹,新建文件夹 CMSIS ,从之前在准备步骤解压的 CMSIS 文件包 \...\CMSIS-SP-00300-r3p2-00rel1\CMSIS 中拷贝 Include 和 Lib 文件夹到当前工程新建的 CMSIS 文件夹。另外,拷贝 \...\CMSIS-SP-00300-r3p2-00rel1\Device\ARM\ARMCM4\Include 中的 ARMCM4.h 和 system_ARMCM4.h 到当前工程新建的 CMSIS 文件夹中; Step 5:    回到 CodeWarrior 主 界面选择新建的工程文件, F5 刷新可以看到 CMSIS 出现在工程文件中。其中 Include 是 CMSIS 库的一些头文件,包括 M0+/M3/M4 的一些头文件;在 Lib 文件中是已经编译好的库文件, ARM 文件夹是使用在 KEIL IDE 中的库文件, G++ 文件夹是使用在 IAR 中的库文件,而由于当前 CW 工程使用的 GCC 的编译器,所以 GCC 文件夹才是 CW 需要的,因此,为缩减工程大小可以删除 ARM 和 G++ 文件夹;     Step 6:    打开工程属性框,选择 Target Processor 的 Float ABI 为 No FPU ; Step 7:    在 GCC Complier 的 Defined symbols 中添加编译的宏定义 ARM_MATH_CM4 ; Step 8:    在 GCC Complier 的 Include paths 中添加 CMSIS 库的头文件,路径为:工程目录 \CMSIS\Include ; Step 9:    在 GCC C Linker 的 Miscellaneous 项的 Other objects 中指定使用的库文件 ( 位于 CMSIS\Lib\GCC 文件夹中 ) 。因为本例程中不使用 FPU ,所以选择 libarm_cortexM4l_math.a ,此处需要特别注意,否则编译会报错; Step 10: 在 ProcessorExpert.c 文件中添加代码; #include <math.h> #include "arm_math.h" #define DELTA    (0.000001f) const float32_t testRefOutput_f32 = 1.000000000; const float32_t radians=1.047197533333333; float32_t   cosOutput, sinOutput, diff; float32_t cosSquareOutput,sinSquareOutput,testOutput; int main( void ) {   int m,n;   PE_low_level_init();   cosOutput = arm_cos_f32(radians); /* 求正余弦 */                   sinOutput = arm_sin_f32(radians);                                 arm_mult_f32(&cosOutput, &cosOutput, &cosSquareOutput, 1); /* 求积运算 */   arm_mult_f32(&sinOutput, &sinOutput, &sinSquareOutput, 1);               arm_add_f32(&cosSquareOutput, &sinSquareOutput, &testOutput, 1); /* 求和运算 */   diff = fabsf (testRefOutput_f32 - testOutput);  /* 求绝对值 */                 if (diff > DELTA)   {                         while (1)                                 {                                   for (m=0;m<2000;m++)                                                 for (n=0;n<200;n++){};                                                 D7_NegVal();                                 }     }                 } Step 11:    编译并下载 Debug ,在   sinOutput = arm_sin_f32(radians); 处设置断点,可以看到 CMSIS-DSP 库中的正余弦浮点数运算函数运算正常,其反汇编的得到为普通的 ARM 指令 (FPU 单元汇编指令通常在普通指令前加字母 V ,仅在 FPU 功能被使能时使用 ) ,完成一个正弦计算; 至此,完成了不使用 K70 的 FPU 浮点运算单元,移植 CMSIS 的 DSP 库到 CW 的步骤。     三.     使用 K70 的 FPU 浮点运算单元,移植 CMSIS 的 DSP 库到 Codewarrior 的步骤 使用 K70 的 FPU 硬件浮点运算单元,移植 CMSIS 的 DSP 库到 Codewarrior 的方法有两种:一种是按照上面软浮点的方式 Step By Step 的建立工程,步骤和上面二的步骤基本一致,主要的两个区别在于: (1). Step 2 要选择 Handware(-mfloat – abi=hard) 选项, (2). Step 9 改为 libarm_cortexM4lf_math.a 。另外一种就是在上面工程的基础上修改配置选项。鉴于方便,本教程采用第二种方案,完成在 Codewarrior 中调用 CMSIS 的 DSP 库,通过 K70 的 FPU 浮点运算单元执行浮点运算,即硬浮点。 Step 1:    打开工程属性对话框 , 选择 Target Processor 的 Float ABI 为 FPU with hard vfp passing(-mfloat –abi=hard) ; Step 2:    在 GCC Complier 的 Defined symbols 中添加编译的宏定义: _VFPV4 ; Step 3: 在 GCC C Linker 的 Libraries 项的 library search path 中指定链接的规则,把上面工程中默认的 "${MCUToolsBaseDir}/ARM_GCC_Support/ewl/lib/armv7e-m" 修改为 "${MCUToolsBaseDir}/ARM_GCC_Support/ewl/lib/armv7e-m/fpu" ; Step 4:    在 GCC C Linker 的 Miscellaneous 项的 Other objects 中指定使用的库文件 ( 位于 CMSIS\Lib\GCC 文件夹中 ) 。因为本例程中使用 FPU ,所以选择 libarm_cortexM4lf_math.a ,此处需要特别注意,否则编译会报错; Step 5:    完成以上配置后,编译工程并下载调试(此处建议编译之前先 Clean 一下整个工程),同样,在   sinOutput = arm_sin_f32(radians); 处设置断点,可以看到 CMSIS-DSP 库中的正余弦浮点数运算函数运算正常,其反汇编的得到为 FPU 指令 (FPU 指令通常是指在普通指令前加字母 V ,仅在 FPU 功能被使能时使用 ) ,并且在 Register 观察窗口中也多了个 FPU 寄存器列表,感兴趣的读者可以对比一下和前面实验汇编出代码的差异,此处不再赘述; 至此,分别完成了使用和不适用 K70 的 FPU 浮点运算单元情况下, CMSIS 的 DSP 库到 Codewarrior 的移植。在实际应用中需要用到更多的 DSP 函数,在项目中直接调用即可。下一步, Just Enjoy The Convenience of  The CMSIS! 有一点需要说明的是,前文中讲到使用 FPU 单元需要两步设置: (1). 在编译器中开启相应的 FPU 功能选项; (2). 开启芯片 FPU 单元。似乎我们前面的设置是完成了第一个步骤,然而第二个步骤呢?仔细查看 _arm_atart.c 文件,可以发现代码 _fp_init() 正是完成了开启芯片 FPU 单元的过程,如下图,是一个条件编译函数,这也就解释了为什么在上面 Step 2 中定义了 _VFPV4 ,其本质也就是使能芯片的 FPU 单元,其具体实现可以 查看 A RM手册 的第 74 页的描述 。 #ifdef    __VFPV4__        //Step 2 中的宏定义                 __fp_init();      // 开启芯片的 FPU 单元 #endif
View full article
FINALISTAS Después de un profundo análisis de todos los proyectos, nuestros jueces realizaron la difícil selección de los finalistas del Kinetis L MCU Challenge México entre los que el público elegirá al ganador; gracias a la excelente respuesta decidimos nombrar 16 finalistas.  Ellos son: Project Name Contestan Name Description Video Sistema de monitoreo de la contaminación acústica #MonitoreoAcustico Lucio Canche Diseño de una placa para monitoreo de niveles de ruido utilizando un sensor de sonido. Permite el estudio detallado de los patrones de propagación del sonido. Movimiento de un carro controlado # CarroPelotasAntiestres Emilio Jiménez Auto de juguete controlado por medio de pulsaciones realizadas con 2 pelotas anti-estrés, el presionar una pelota hará que el vehículo avance hacia adelante y la otra hará que gire sobre su propio eje. Viking lever #VikingLever Ma. Fernanda Gutierrez Consiste en un sistema de una palanca con contrapeso; tendrá en la punta una pelota con una led que indicará cuando el usuario tiene que golpearla. Controlador para el suministro de agua de una vivienda #ControladorAgua Rogelio Rosales El objetivo es el ahorro de agua. En un tinaco se colocan 2 sensores, uno a nivel alto y el otro a nivel bajo de agua. Dependiendo del nivel del agua los sensores mandan la señal a la bomba para que se encienda o apague. Rehab glove #RehabGlove Alexis Castañón Guante que posee sensores de flexión en las articulaciones de los dedos y de fuerza en las yemas, con el fin de enviar instrucciones a algún aparato, mientras el usuario realiza ejercicios como cerrar el puño o tocar las yemas de los dedos con el pulgar. Tablet braile para invidentes #TabletBraille Andres Gafford Tableta para leer ebooks braile con botones para cambiar de página, apagar y encender, que sean fáciles de percatar por un invidente; así como botones interactivos que desplieguen opciones del menú. Tapete interactivo para discapacitados #TapeteInteractivo Angel Campoy Este tapete interactivo, contribuye al desarrollo motriz. El teclado cuenta con cuatro botones, los cuales tienen un led que se enciende indicando al paciente que debe presionar el boton. Si activo el boton indicado,se enciende un LED verde o rojo si se equivocó. Neck remote control wheel chair #NeckControl Francisco Javier Pérez Corona Silla de ruedas controlada moviendo el cuello a la izquierda o derecha, presionando un botón con la cabeza, que a su vez haga avanzar o girar. Control de sensores infrarrojos para silla de ruedas #SensoresSilla Jesús Lizárraga Silla de ruedas diseñado para personas con parálisis cerebral. El usuario debe colocar las dos manos al ifgual que los codos por encima de los espacios indicados, los sensores se activarán haciendo que la silla avance o gire hacia el lado en que la persona posicionó la mano. N-drid uleta #NdridRuleta Jorge Rodriguez Rodriguez Juego de ruleta de leds de 4 colores, el usuario acumulará puntos cada vez que logre presionar el botón del color en donde parará la ruleta. KMA #KMA Luis Castellanos Prototipo para silla de ruedas que será controlada con un dispositivo de fácil manejo,  comunicado a la silla por bluethooth. Sensilla #Sensilla Miguel Rogel Silla móvil manipulada por sensores y con esto lograr desplazarse de una manera más accesible a sus capacidades. Pest control using Freescale #PestControl Pablo Yerena Este proyecto consiste en el control de plagas de manera ecológica, con la implementación de un aparato electrónico que emite frecuencias ultrasónicas evitando que animales e insectos invadan espacios físicos. Tren de colores musical #TrenColores Ricardo Villaseñor Juguete donde se utiliza un sensor óptico para la lectura de pequeños cubos de colores, donde cada color es una nota musical. Al colocar el lector sobre el cubo de color se emitirá la nota correspondiente. Morse deaf-mute communication system #MorseDeafMute Roberto Vite Ruiz Dispositivo de escritura basado en el código morse. Se muestra un código morse para cada letra del alfabeto permitiendo a una persona sorda o muda darse a entender de manera escrita.       Casco acelerómetro #CascoAcelerometro José Ramón Rodriguez Dispositivo  para silla de ruedas que  permite al paciente transportarse autónomamente mediante una especie de casco que detecte la dirección deseada, además de que sea una manera recreativa de trasladarse Podrás participar calificando cada proyecto a través de redes sociales y la herramienta RankTab; la votación se abrirá el día del evento a partir de las 9:00am, espera las instrucciones a través de la Comunidad Freescale,  Facebook y durante el evento. A todos los finalistas los esperamos el 07 de Diciembre a las 8:00hrs en el Centro de Congresos del Tecnológico de Monterrey Campus Guadalajara, donde se develará el misterio y conoceremos al ganador del viaje al Freescale Technology Forum (FTF) en Dallas, Texas del 08 al 11 de Abril del 2014 . Para solicitar mayor información, favor de enviar un correo a cristina.garcia@mclgx.comA
View full article
Producto dirigido para terapias visuales y motrices. Consiste en una matriz de 6x3 LEDs, una columna verde, una amarilla y una roja. Aleatoria mente, se encenderá un LED que se encuentra hasta arriba, y ese irá bajando por la columna de su color hasta llegar al ultimo. Cuando eso suceda, se deberá presionar el botón del color correspondiente. Si esto se realiza correctamente, se suma un punto, de lo contrario se restan tres y suena un buzzer. Los puntos se despliegan en pantalla. La velocidad del juego se puede controlar con un potenciometro y un motor Servo se mueve dependiendo del puntaje.
View full article
Gracias a la excelente respuesta por parte de los concursantes, les informamos que daremos a conocer los proyectos finalistas el próximo martes 26 de Noviembre de 2013, a través de la comunidad Freescale y redes sociales; recibimos proyectos con gran potencial que aún están siendo evaluados por nuestros jueces. A continuación te compartimos los criterios a evaluar: • Alineación con las tendencias del futuro (Salud y Seguridad, Efecto Net, Going Green) • Creatividad • Innovación • Utilidad de la aplicación • Beneficio ambiental potencial para el uso del producto. Los finalistas seleccionados tendrán la oportunidad de presentar su prototipo en el evento Freescale Cup 2013 el día 7 de Diciembre de 2013 en el Tecnológico de Monterrey, Campus Guadalajara; donde el proyecto ganador será elegido por los asistentes al evento, a través de la comunidad Freescale y redes sociales. Recuerda que el ganador viajará con todos los gastos pagados al Freescale Technology Forum (FTF) en Dallas, Texas . Mantente atento el próximo martes 26 de Noviembre de 2013 y descubre los proyectos finalistas, tú puedes ser uno de ellos.
View full article
    感谢Baolei之前在weekly meeting上分享的关于在Codewarrior环境下实现printf的重定向技巧,从而在CW调试环境下的Console上实现调试信息的打印功能,我将其移植到IAR环境下并进行了测试,可以实现调试信息的交互,完全可以替代串口的功能,在这里写出来分享给大家,再次感谢baolei的分享~     通过串口打印调试信息或者实现上下位机交互是我们最常使用的调试手段之一,毕竟实现起来无论是硬件成本(接出两根线Txd和Rxd,外加一个电平转换芯片)还是软件成本(下位机写好UART驱动,上位机直接超级终端或者一些第三方串口调试助手)都是相对较低的,所以这种方式还是灰常受广大“攻城师”们欢迎的。不过如果由于I/O资源紧缺串口被用做其他用处或者板子直接没有引出串口的话(是不是产生共鸣了,呵呵),那该怎么办呢?     当然,所谓时代不同了(liao)(顺口想说“男女都一样呢”,呵呵,哎,都是生在旧社会长在红旗下的孩子啊),随着嵌入式开发生态系统越来越完善,目前也是有越来越多的Poweful开发工具支持丰富的调试功能(支持打印调试信息和交互等),但是涉及到一些版权的问题价格上还是有点小贵的(对一些小企业来说还是难以接受的),所以这个时候就需要我们动动脑筋去摸索摸索其他的方法(所谓路是探索出来的),事实证明破釜沉舟下人的潜力是无限的,呵呵,这里就分享一个折衷的办法去解决大家一直苦恼的问题,即使用IAR虚拟的串口终端来实现信息的交互和打印,下面进入正题: 测试平台:IAR6.6 + FRDM KE02开发板(我目前手里有这个,其他平台都可以) 测试代码:KE驱动库(KEXX_DRIVERS_V1.0.1_DEVD\kexx_drv_lib_release_r1.0.1\build\iar\ke02\platinum) 这里稍微提一句,我测试的是KE驱动库的代码,但是实际上只要你看懂了我下面的解决方法(授之以渔而不是鱼),其他代码都是类似的。 1)打开KE02 platinum的IAR工程,进入到platinum.c文件,找到main函数如下图1,可以看到其调用了printf打印函数,而该工程是默认调用底层串口的,我们跳转到该函数的定义如图2,再继续跳转到out_char的函数定义如图3,这下就屡清楚了,我们可以很直观的看到工程默认是调用UART底层的,呵呵,下面我们就要动手改造它对printf进行重定向; 2)首先我们需要注释掉printf的实现函数,将其屏蔽掉,然后需要给printf一个重新指向的地址,下面就该我们常见的<stdio.h>这位老兄出场了(貌似当初自打我开始接触Turbo C的时候就已经用到它了,老生常谈的“Hello world”就是调用它内部的printf来实现的)。我们找到Common.h文件,将<stdio.h>添加到其中,如下图,这样凡是需要printf的文件只需要添加common.h头文件即可: 3)这里先说说stdio.h文件的作用,我们打开stdio.h文件可以看到其内部定义了标准输入输出函数,包括我们常见的scanf和printf等函数,而这些函数所调用的底层即为IAR提供的链接到其Terminal的驱动,所以……懂的,呵呵。除此之外,我们肯定不满足只输出打印(给人略显低端的感觉有木有),所以为了体现我们不是“土豪”,我觉着有必要让它交互起来,实现真正的串口功能(因为一些类似bootloader或shell之类的还是需要输入参数的进行交互的),我在main函数添加了scanf语句用来测试输入功能,如下: 4)准备工作就绪,编译链接整个工程,然后下载到KE02的板子中并进入到Debug调试环境中,点击View->Terminal I/O调出虚拟终端,然后全步运行,就可以看到Terminal下开始打印调试信息,如下图1。当然显示输出有点小case了,我们再试试输入功能,在input框中输入‘a’,然后回车,如下图2,perfect: 5)还没完,我们要玩就玩高端大气上点档次的,我们再探索探索呢,结果又发现个小惊喜,我们点击上图右下角的“Input Mode”,弹出设置框如下,很高端啊有木有: 呵呵,看完之后是不是有种跃跃欲试的兴奋呢,呵呵,just have a try and enjoy it~ 附件为我修改之后的工程代码,仅供参考~
View full article
Este proyecto está siendo desarrollado por alumnos del Tecnológico de Monterrey Campus Guadalajara, el cual está orientado para servir como un tipo de terapia para personas discapacitadas. El proyecto en sí consiste en el control de un vehículo de juguete por medio de pulsaciones que serán realizadas con pelotas anti-estrés, de esta forma la persona podrá realizar un ejercicio de fortalecimiento en sus extremidades superiores de una forma más entretenida y menos tediosa que las clásicas terapias. Es importante mencionar que para poder realizar este proyecto es necesario el uso de dos tarjetas Freedom KL25Z de Freescale®, dos módulos Bluetooth®, dos servomotores de rotación continua y dos sensores de presión, los cuales serán incorporados dentro de las pelotas anti-estrés. El vehículo de juguete estará compuesto por los servomotores, que servirán como llantas; un módulo Bluetooth®, el cual recibirá las señales del otro módulo; y una de las tarjetas Freedom KL25Z. Por otro lado una de las tarjetas Freedom KL25Z estará conectada con los sensores integrados en las pelotas anti-estrés y a un módulo cuya función es mandar la información capturada por los sensores al vehículo de juguete. La mecánica del proyecto depende de la pelota que sea presionada, pues si se presiona solamente una pelota, el vehículo avanzará, por otro lado si se presiona la otra pelota, el vehículo girará sobre su propio eje. Este proyecto tiene como fin la implementación de conocimiento prácticos y teóricos en busca de una aportación en beneficio de la sociedad. También es relevante comentar que las visiones a futuro de este proyecto es que pueda ser implementado como una especie de control para una silla de ruedas, con el fin de facilitar la movilidad y aumentar la comodidad al momento de usar este tipo de vehículo. Original Attachment has been moved to: Codigo-tarjetas-freedom.zip
View full article
Document describing first steps of simple touch sensing application in Code Warrior and TWR board is attached. We will use K60 board from www.freescale.com/tower, CodeWarrior from www.freescale.com/codewarrior, TSS package www.freescale.com/tss, and later FreeMASTER visualization and debugging software  www.freescale.com/freemaster the proces is described in detail and final code is attached for easy jump into the topic Pavel Sadek
View full article
El proyecto está basado en Kinetis KL25Z, consiste en utilizar un tapete de 9 “Botones” y un nunchuck para rehabilitación en piernas y o entrenar sus capacidades sicomotrices llevarlo a cabo atravez de programas especiales en PC, bien esto se lleva acabo utilizando la función de HID de Processor Expert, en el caso del nunchuck funciona como mouse y el tapete como teclado, el joystick del nunchuck actúan como el desplazamiento del mouse y los dos botones con los que cuenta actúan como clic derecho e izquierdo y el tapete actúa como las teclas W, A, S, D, (están son configurables) más 5 teclas adicionales, el tapete está formado por sensores de presión que al pisarlos simulan las teclas correspondientes.     BodyPCcontrol Kinetis Challenge México 2013 - YouTube Original Attachment has been moved to: HID-KEYRUG-KL25Z.rar
View full article
  (para español continua mas abajo) Blind deaf-mute comunication system   Materials Used : A Freedom- KL25Z card A USB Cable A 16x2 LCD Display Three buttons A breadboard A USB cable   Project description Thinking about the difficulties a blind, deaf-mute person has to convey a message, we designed a device to facilitate their communication. Using the Morse key system, the disabled person can write a short message on a LCD screen. For this, you need to press three buttons, and depending on the duration, a function will be performed. 1. If you short-press the button on the left, this will erase the last character typed, however, if you long-press, this will erase everything written. 2. If the middle button with the green label is short-pressed, this will print a dot at the bottom of the screen. If you long press the button, it will print a dash. In Morse code, the dot represents a single signal and the dash represents a triple signal. 3. If the button on the right, with the yellow label is short pressed, the LCD display space will be added to the message. But if he was held down with a longer duration, the set of ¨ Short ¨ and ¨ Long ¨ will be transformed in to a letter in the alphabet and it will be printed on the screen. Note: * If the set of Short and Long does not match any sequence in the matrix, no character is added to the message. **The system to display and write the message on the LCD display are separate.     Modifications for the second stage of the prototype 1. Delete button on the right, the yellow label, Send and Space. a. It is intended that the third button is eliminated by increasing the code efficiency. Instead of sending the sequence of short and long pressing a button, they are sent after a desired time interval. b. Wanted to enter the space with a sequence of short and long. 2. Currently the project is divided into two boxes, one that displays the buttons and other writing. The goal is to have a single box which can write and display the message. 3. With a potentiometer seek to change the time it takes to push a button to be recognized among one short and one long signal.   Modifications for the third stage of the prototype 1. Perform the division again in two boxes , interconnected by Bluetooth modules , as the system is designed to generate a communication between two people, using a system of sending data to harvest deaf -mute person in the future by Braille .       Sistema de Comunicación para Persona Ciega, Sorda y Muda   Materiales Utilizados: Una tarjeta Freedom-KL25Z Un Cable Una Pantalla LCD 16x2 Tres botones Una placa de pruebas (protoboard) Un cable USB   Descripción de Proyecto             Pensando en las dificultades que una persona ciega, sorda y muda tiene para transmitir un mensaje, se ha diseñado un aparato para facilitar su comunicación. Utilizando el sistema de clave morse, la persona con discapacidad puede escribir un mensaje corto en una pantalla LCD. Para esto, se deben presionar tres botones que dependiendo la duración del toque, será la función que efectuará. 1. Si al botón de la izquierda, con la etiqueta azul, apenas se le presiona este borrará el ultimo carácter escrito; sin embargo, si se le presiona con una mayor duración este borrará todo lo escrito. 2. Si al botón del medio, con la etiqueta verde, apenas se le presiona este imprimirá en la parte inferior de la pantalla un punto. El punto representa, un corto en el sistema de clave morse. Sin embargo, si se le mantiene presionado por un momento mas largo, este imprimirá un guión. El guión representa un comando largo en el sistema de clave morse. 3. Si al botón de la derecha, con la etiqueta amarilla, apenas se le presiona, en la pantalla LCD se agregará un espacio al mensaje. Sin embargo si se le mantiene presionado con una mayor duración, se enviará el conjunto de ¨Cortos¨ y ¨Largos¨ a una matriz para que la secuencia se busque y cuando esta se haya, en la LCD se agrega la letra deseada al mensaje. Nota: *Si el conjunto de Cortos y Largos no coincide con ninguna secuencia en la matriz, ningún carácter se agregará al mensaje. ** El sistema para mostrar el mensaje con la LCD esta separado a los botones para escribirlo.     Modificaciones para la segunda etapa del prototipo 1.      Eliminar el botón de la derecha, con etiqueta amarilla,  de Enviar y Espacio. a.       Se pretende que el tercer botón sea eliminado mediante el aumento en la eficiencia del código. En vez de enviar la secuencia de Cortos y Largos al presionar un botón, estos se enviarían después de un intervalo de tiempo deseado. b.      Se busca que el espacio se introduzca con una secuencia de cortos y largos. 2.      Actualmente el proyecto está dividido en dos cajas, una que muestra el mensaje y otra con los botones para escribir. El objetivo es tener una sola caja con el que se pueda escribir y mostrar el mensaje. 3.      Con un potenciómetro se busca cambiar el tiempo que se necesita apretar un botón para que se reconozca entre un toque corto y uno largo.   Modificaciones para la tercera etapa del prototipo 1.      Realizar de nuevo la división en dos cajas, comunicadas entre sí por módulos bluetooth, ya que el sistema está pensado para poder generar una comunicación entre ambas personas, utilizando en un futuro, un sistema de envío de datos a la persona siega sordo-muda mediante el sistema braille.
View full article
Este teclado interactivo, esta hecho para ayudar a discapacitados en su desarrollo motriz. El teclado contara con cuatro botones, los cuales tienen un led en la parte superior y un sensor piezoelectrico. El LED superior se enciende, avisando al paciente que debe presionar el boton. El boton al ser presionado, activa al sensor, el cual manda una señal a la tarjeta freedom y prende un LED verde si activo el boton indicado o rojo si se equivoco. Finalmente el resultado de los botones activa un servomotor.   Ficha técnica del proyecto, indicando una descripción breve de su funcionamiento y especificaciones técnicas. Requerimientos técnicos para la exhibición del demo, como conexiones para lap top o conexión de internet.   Ficha tecnica Teclado interactivo para discapacitados Descripcion Este teclado se controla con la computadora. Tiene 4 botones y cada uno tiene un LED en la parte superior. El terapeuta elije que LED prender y el paciente debe presionar el botón correspondiente. Si presiona el botón debido, se prendera un LED verde y girara un servomotor, si se presiona cualquiera de los otros botones, se encenderá un LED rojo y el servomotor no reaccionara. Especificaciones de construcción Construcción: madera, MDF. Microcontrolador: Tarjeta Freedom Servomotor (x1) Capacitores cerámicos: microfaradios (x4) Sensores Piezoelectricos (x4) Leds (x6) Resistencias: 10K (x10) Requerimientos tecnicos Conexión USB a una computadora con programa Realterm para la comunicación serial.           Video final Tapete interactivo video final - YouTube Original Attachment has been moved to: codigo-teclado.txt.zip
View full article
ButtonRace O ∆ []   ButtonRace es un juguete simple, un pequeño invento, que permitirá cambiar la vida de los niños que sufren alguna discapacidad. Nuestra creación está diseñada de una manera muy simple que, a su vez, permite a los niños con capacidades diferentes tener el máximo aprovechamiento. En general, nuestro objetivo era desarrollar los reflejos ojo-mano y estimular el aprendizaje de los niños. Esto, sin caer en las terapias actuales, que al ser tan habituales, pueden volverse menos efectivas. En resumen, el juego consiste en que el niño debe presionar el botón correspondiente a la figura que le es mostrada, lo que permitirá que un pequeña estrella avance a través de una pista de forma determinada. El mecanismo funciona a través del uso de una tarjeta Freedom de Freescale. Además, del uso de una serie de LEDS, un servomotor y algunos sensores infrarrojos y de presión. El sistema está diseñado para darle una retroalimentación al infante, para ver si su respuesta fue correcta. Las figuras encienden en color azul en el momento en que el niño debe presionar algún botón. Dependiendo de si la respuesta fue acertada, la misma figura cambia de color a verde o rojo. Dependiendo de si la figura y el botón corresponden, además, un servomotor moverá la estrella por la pista. Después de varias respuestas correctas, la estrella llegará a una meta, donde el sistema se reiniciará automáticamente. Nuestra intención es que este sistema tan simple de aprendizaje para niños, puede ser utilizado para enseñar otras cosas, además de cumplir nuestro objetivo principal.   Original Attachment has been moved to: Buttonrace.odt
View full article
En México, el 5.1% de la población vive con algún tipo de discapacidad, de los cuales 23% poseen discapacidades del tipo motriz en extremidades inferiores y superiores (INEGI, 2011). Los métodos que actualmente se utilizan en el proceso de rehabilitación no poseen características integrales en las que el usuario pueda aprovechar la terapia para ejecutar diferentes acciones. El objetivo de este proyecto es el de diseñar y construir una herramienta que permita al usuario no solo hacer ejercicios de rehabilitación, sino que también le ayude a realizar tareas cognitivas o a interactuar con algún medio electrónico (i. e. navegar por internet, realizar trabajos a través de una computadora con Rehab Glove como mouse y/o teclado). Rehab Glove es una herramienta en forma de guante que posee sensores de flexión en las articulaciones de los dedos y de fuerza en las yemas, ubicados estratégicamente con el fin de obtener diferentes valores arrojados mientras el usuario realiza ejercicios de rehabilitación como cerrar el puño o tocar las yemas de los dedos con el pulgar. Estos valores serán convertidos en instrucciones diversas que van desde mover un  carro a control remoto, pasando por el control de videojuegos educativos, hasta llegar a tareas más complejas como escribir o controlar el cursor de una computadora sin la necesidad de un mouse o un teclado. La terapia comenzará con el usuario portando RehabGlove frente al elemento que desea controlar, pidiéndole que realice movimientos específicos con la mano para que pueda lograr el objetivo final. Se espera que el nivel de complejidad vaya aumentando en cuanto al tipo de movimientos, rapidez, precisión y fuerza aplicada en cada acción. Con el uso de RehabGlove se espera que las terapias de rehabilitación posean niveles de cognición mayores y que tengan un avance progresivo aumentando el nivel de complejidad en cada ejercicio.   Video de prototipo<<<<< Rehab Glove Kinetis - YouTube Original Attachment has been moved to: Codigo-Fuente-Rehab-Glove.txt.zip
View full article
This project is for neck's physical therapy and for a wheel chair that will move just with two buttons. This project is intended to be for persons who cannot move arms to do stuff.Instead of having a little joystick to move, they will just have to press one button turn around on the wheel chair or press the other button to make it advance. Because of the time we have to present this project, we will for now apply this idea to a toy car that will help children to do physical therapy on the neck.   Silla de Ruedas controlada por movimientos del cuello - YouTube   Facebook Original Attachment has been moved to: Code.zip
View full article
Este proyecto se hizo teniendo en mente el consumo del agua en un hogar promedio para ayudar a no desperdiciarla; en un caso típico se tiene una cisterna a la que llega el agua directamente de la red de agua potable de la ciudad, también se cuenta con un tinaco y con una bomba de agua para trasladarla desde la cisterna. Tanto el tinaco como la cisterna cuentan con 2 sensores de nivel de agua, un nivel alto y un nivel bajo... Por dar un ejemplo, cuando la cisterna se encuentre totalmente llena y el tinaco vacío, la bomba encenderá para enviar agua al tinaco y continuará subiendo agua hasta que el sensor alto del tinaco detecte que ya está lleno y entonces se apagará la bomba; cuando el tinaco empiece a vaciarse y el nivel alto no detecte agua la bomba no encenderá, lo hará hasta que el nivel bajo del tinaco no detecte agua, de ésta manera se evita que la bomba esté prendiendo y apagando si es que se utiliza solo el sensor alto para encender y apagar la bomba. Un caso parecido será el de la cisterna; la cisterna solo enviará agua al tinaco si ésta se encuentra llena o si tiene un nivel medio de agua (por el hecho de estar mandando el líquido al tinaco) y en caso de estar vacía o aunque el nivel bajo esté detectando agua no prenderá la bomba hasta que el nivel alto detecte que ya está llena de nuevo, ésto para evitar (al igual que en el caso del tinaco) que con el simple cambio de un solo sensor esté prendiendo y apagando la bomba; es aquí donde se aplica la lógica y es el trabajo que hace en éste proyecto la tarjeta de freescale.
View full article
    类似前段时间我写的两篇关于知识产权保护芯片加密的文章,这次再说说产品量产时常需要考虑的另一个问题——烧写序列号。     在产品批量生产的时候,很多客户会有这样的需求,即将每个芯片烧写一个唯一的ID号(Serial Number),以方便对产品进行跟踪和管理或者满足对芯片进行绑定ID号加密的需要。而为了提高整个批量生产过程的效率,选择一个好的烧写工具则至关重要。对飞思卡尔的Kinetis系列来说,可用的烧写方案包括P&E官方的Cyclone MAX(支持在线烧写和脱机烧写,当然价格较贵)和J-Link(仅支持在线烧写,需要仿真器+上位机配合)等,本篇就以最近比较火的Freescale M0+ Kinetis L系列为例详细介绍一下J-Link+J-Flash批量烧写串号的方案(说到此,不得不感叹J-Link的强大,高速的下载和调试,丰富的IDE支持和调试组件和强有力的调试功能,不是土豪人家是金啊,怎一个强大了得): 开发平台:Kinetis L系列KL15Z128 烧写工具:J-Link + J-Flash(v4.76f) (1) 这里不单独对J-Flash多作介绍,可以参考我之前的一篇文章 《教你用J-Flash ARM工具单独烧写程序到Kinetis》 ,至于包括J-Flash在内的软件包可以直接到SEGGER官网下载 http://www.segger.com/jlink-software.html ,建议下载最新版的,支持的芯片系列较全,相应的组件功能也更强大; (2) 打开J-Flash(路径为Start->All Programs->SEGGER->J-Link ARM V4.76f->J-Flash),在最新版本中会直接弹出选择已有工程选项卡,根据需要在路径"安装路径\ SEGGER\JLinkARM_V476f\Samples\JFlash\ProjectFiles\Freescale”下选择自己的目标芯片(我这里选择MKL15Z128xxx4.jflash),选择如下图: (3) 点击“start J-Flash”进入工程管理界面,然后点击File->Open data file,找到需要下载的bin文件或者S19文件,将其加载到jflash工程里面,加载之后的界面如下图: (4) 万事具备,接下来就开始进行烧写序列号的设置。点击“Options->Project Settings->Production”,选中“Program Serial Number”,设置如下: (5) 点击“OK”,设置完毕(只设置一次即可),然后连接目标芯片“Target->Connect”,连接成功,点击“Auto”,系统会自动将设置好的序列号添加到s19文件相应的地址然后启动下载,同时也会在Jflash的工程目录(之前加载的sample prject的目录)下生成一个“<JFlashProjectName>_Serial.txt”,内容如下图,其中“12345679”为下次要写入的数据,系统自动为其加1了(由“Increment”决定): (6) 我们回读烧写到片子中的数据(Target->Read Back->Entire chip),然后跳转到“0x2000”地址,可以看到序列号(12345678的十六进制)已经写入,如下图: 注意事项: (1) 在烧写的时候,必须点击“Auto”下载,这样才会生成“<JFlashProjectName>_Serial.txt”文件,且会把序列号自动添加到s19文件然后烧进去,直接点击“Program”或者“Program&Verify”等烧写功能只会烧写原始S19文件,不会添加序列号; (2) J-Flash烧写序列号最多支持4个字节,高于四个字节的数据J-Flash会将前四个字节取反再烧进去,所以实际上起作用的还是4个字节,不过单纯作为序列号的话肯定是足够了,4个字节32个比特位,IPv4的地址也就这些吧,呵呵,想不到会有什么产品会超过这个范围,那样的话Freescale超越当年的Motorola也不是问题了啊,哈哈; (3) 关于烧写地址的问题,理论上只要在目标芯片的Code Flash地址范围内并且不与原始运行代码地址重叠即可,因为J-Flash烧写的原理是先添加数据到原始bin或者S19文件相应的位置然后整个文件一块烧写进去,所以写序列号的时候不需要额外的再擦写扇区一次也就是不会破坏同在一个扇区的原始数据,不过当然如果flash空间足够大的话不建议将序列号烧写地址挨着原始代码太近,建议将序列号写到Flash的最后,规避风险; (4) 实际上采用J-Flash也可以烧写多余4个字节的数据,不过这需要手动添加编辑txt文件,这里就不多说了,可以参考附件中文档。
View full article
This example shows a FRDM-KL46Z interfacing with a Bluetooth-serial board BT_BOARD V1.05, it uses FREEMASTER to graph temperature and light sensor variables. Check how to connect, configure Bluetooth, and freemaster in attached document FRDM-KL46Z-Bluetooth-Freemaster.zip contains                            srec file                            firmware                            fremaster project (.pmp) Luis
View full article
Hello,      Is your clock correctly configured, what is its frequency?   You can monitor some of clocks in K0 MCU by routing it to  PTC3/CLKOUT pin. you can get it easily by selecting desired clock on  SIM_SOPT2[CLKOUTSEL] register and configuring PTC3 for CLKOUT function.   For example to monitor  1 KHz 1 low power osillator   LPO, ---------------------------------------------------------------------------------------------------------------------------- /*  ClockOutput options */ #define CLOCKOUT_FLASH_CLOCK    2 #define CLOCKOUT_LPO                       3 #define CLOCKOUT_MCGIRC                4 #define CLOCKOUT_RTC32KHZ            5 #define CLOCKOUT_OSCERCLK0       6 /* Configure clock output option according to  */               SIM_SOPT2 = SIM_SOPT2_CLKOUTSEL(CLOCKOUT_LPO); /* Configure PTC3 as clock output) */              PORTC_PCR3 = PORT_PCR_MUX(5);   //CLKOUT function selected on PTC3 ------------------------------------------------------------------------------------------------------------------------------------                 In attached document you can find captures of all clock options,  and notes on what need to be configured to get the clock output.                        Note:       Please note that Clock out (CLKOUT) on PTC3 is not currently shown in Signal Multiplexing and Signal Descriptions of RM.  It is already reported and will be fixed on next release of Reference Manual/Data sheet.
View full article