DSP学习笔记--GPIO


硬件平台: TMS320F28377D
软件版本: CSS 7.3


寄存器说明:

TMS320F28377D存储器宽度为16bit,即每个地址对应16bit的数据,32bit数据对应两个地址,编程寻址需要特别注意。


控制寄存器

GPyCTRL 输入采样周期设置(仅做为输入时有效)
每8个引脚为一组,每组采用相同的采样周期值,t = PLLSYSCLK/(QUALPRDx + 1);

[31:24] - QUALPRD3: GPIO31~GPIO24输入采样周期设置;
[23:16] - QUALPRD2: GPIO23~GPIO16输入采样周期设置;
[15:8]  - QUALPRD1: GPIO15~GPIO8输入采样周期设置;
[7:0]   - QUALPRD0: GPIO8~GPIO0输入采样周期设置;

GPyQSELn 输入采样数设置(仅做为输入时有效)
每个端口需要2bit来设置,所以一共需要2个32bit的寄存器来控制;
00b - 同步, 01 - 3samples, 10 - 6samples, 11 - 异步

GPyMUXn/GPyGMUXn 端口功能设置
用于配置端口的复用功能,每个端口需要4个bit来设置同,需要4个32bit的寄存器:
(GPyGMUX2/GPyGMUX1/GPyMUX2/GPyMUX1)

GPyDIR 端口方向设置,
每bit对应一个端口,输入(1),输出(0);

GPyPUD 上拉禁止设置
每bit对应一个端口,禁止上拉(1),使能上拉(0);

GPyINV 输入极性反转(仅做为输入时有效)
每bit对应一个端口,反转(1),不翻转(0)

GPyODR 输出开漏设置
仅做为输出时有效,用于需要开漏输出的场合,每bit对应一个端口,输出开漏(1),普通输出(0);

GPyCSELn 选择主控制器(重要)
选择由可以读写数据寄存器的主控制器,每4个bit对应一个端口,共需要4个32bit的寄存器;
根据数据手册说明GPyCSEL4/GPyCSEL3的值可以忽略,仅有GPyCSEL2/GPyCSEL1来控制;
xx00: CPU1
xx01: CPU1.CLA1
xx10: CPU2
xx11: CPU2.CLA1

GPyLOCK 配置锁定
锁定后不允修改端口的配置(控制寄存器组),复位后只允许写一次;

GPyACR 锁定提交
GPyLOCK修改后,使能该位来提交确认,复位后只允许写一次;


数据寄存器

GPyDAT      将对应bit写入1或0来设置端口电平,读操作是读取端口的电平置;
GPySET      将对应bit写1来设置该端口为高电平,写0无效;
GPyCLEAR    将对应bit写1来设置该端口为低电平,写0无效;
GPyTOOGLE   将对应bit写1来反转该端口的电平状态,写0无效;


- 阅读全文 -

DSP学习笔记--cmd文件说明


硬件平台: TMS320F28377D

软件版本: CSS 7.3


cmd文件说明:cmd文件主要是用于定位代码及数据的地址;

MEMRORY
定义各区域(名称)的起始地址及大小,然后在SECTIONS中使用;
必须与芯片实际情况相符(重要)。

MEMORY
{
    PAGE 0:    // PAGE0为ROM

            ........

    PAGE 1:    // PAGE1为RAM
        ADCA  : origin = 0x007400, length = 0x000080
        ADCB  : origin = 0x007480, length = 0x000080
        ADCC  : origin = 0x007500, length = 0x000080
        ADCD  : origin = 0x007580, length = 0x000080
}

SECTIONS
指明代码/数据的具体位置;

.text 代码段(必须定义)
.data(必须定义)
.bss 全局变量/静态变量(必须定义)

.stack 指定堆栈位置,不可用GS内存
.esystem 动态内存分配段
.econst 常量

LOAD:指明加载的位置
LOAD = 0x000000 定位到指定的地址
LOAD>ROM 定位到指定名称(MEMRORY中定义的)的存储区,可以简写为>
AdcaRegsFile : > ADCA, PAGE = 1

SECTIONS
{
    AdcaRegsFile : > ADCA, PAGE = 1
}

一个工程可以有多个cmd文件,只要不冲突即可,TI的例程中BIOS.cmd就是定义寄存器级的,所有工程可以共用;


代码地址定位:

#pragma CODE_SECTION(InitFlash, "ranfuncs");

第一个参数是函数名称;
第二个参数是SECTIONS中定义位置;

数据地址定位:

#pragma DATA_SECTION(AdcaRegs, "AdcaRegsFile");
volatile struct ADC_REGS AdcaRegs;

第一个参数为变量名称;
第二个参数是在SECTIONS中定义的字段名称;


基于RAM运行例程:

存储器详细信息参考数据手册 6.3.1 Memory章节
GS 128KB(64KW = 4KW * 16) Global Shared RAM
LS 24KB(12KW = 2KW * 2) Local Shared RAM (CPU与CLA都可以访问)

M0/M1 1KW * 2 Dedicated RAM(仅CPU可以访问)
D0/D1 2KW * 2 Dedicated RAM(仅CPU可以访问)

MEMORY
{
PAGE 0 :    /* ROM */

   /* BEGIN 用于从SARAM引导模式 */    
   BEGIN     : origin = 0x000000, length = 0x000002

   /* CPU直接访问内存 */
   RAMM0     : origin = 0x000122, length = 0x0002DE
   RAMD0     : origin = 0x00B000, length = 0x000800

   /* 全局共享RAM(共64KW) 32KW 用于ROM */
   RAMGS0      : origin = 0x00C000, length = 0x001000
   RAMGS1      : origin = 0x00D000, length = 0x001000
   RAMGS2      : origin = 0x00E000, length = 0x001000
   RAMGS3      : origin = 0x00F000, length = 0x001000
   RAMGS4      : origin = 0x010000, length = 0x001000
   RAMGS5      : origin = 0x011000, length = 0x001000
   RAMGS6      : origin = 0x012000, length = 0x001000
   RAMGS7      : origin = 0x013000, length = 0x001000

   RESET:      : origin = 0x3FFFC0, length = 0x000002

PAGE 1 :    // RAM

   BOOT_RSVD       : origin = 0x000002, length = 0x000120     /* Part of M0, BOOT rom will use this for stack */
   RAMM1           : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAMD1           : origin = 0x00B800, length = 0x000800
     
   /* 本地共享RAM 共12KW = 2KW*6 */
   RAMLS0    : origin = 0x008000, length = 0x000800
   RAMLS1    : origin = 0x008800, length = 0x000800
   RAMLS2    : origin = 0x009000, length = 0x000800
   RAMLS3    : origin = 0x009800, length = 0x000800
   RAMLS4    : origin = 0x00A000, length = 0x000800
   RAMLS5    : origin = 0x00A800, length = 0x000800

   /* 全局共享RAM(共64KW) 32KW 用于RAM */
   RAMGS8      : origin = 0x014000, length = 0x001000
   RAMGS9      : origin = 0x015000, length = 0x001000
   RAMGS10     : origin = 0x016000, length = 0x001000
   RAMGS11     : origin = 0x017000, length = 0x001000
   RAMGS12     : origin = 0x016000, length = 0x001000
   RAMGS13     : origin = 0x017000, length = 0x001000
   RAMGS14     : origin = 0x016000, length = 0x001000
   RAMGS15     : origin = 0x017000, length = 0x001000
   
   CANA_MSG_RAM     : origin = 0x049000, length = 0x000800 
   CANB_MSG_RAM     : origin = 0x04B000, length = 0x000800   
}


SECTIONS
{
   codestart        : > BEGIN,     PAGE = 0
   ramfuncs         : > RAMM0      PAGE = 0

   .text            : >>RAMM0 | RAMD0 |  RAMGS0 | RAMGS1 | RAMGS2 | RAMGS3 | RAMGS4 | RAMGS5 | RAMGS6 | RAMGS7,   PAGE = 0
   .cinit           : > RAMM0,     PAGE = 0
   .pinit           : > RAMM0,     PAGE = 0
   .switch          : > RAMM0,     PAGE = 0
   .reset           : > RESET,     PAGE = 0, TYPE = DSECT /* not used, */
/*---------------------------------------------------*/    
   .stack           : > RAMM1,     PAGE = 1
   .ebss            : > RAMLS5,    PAGE = 1
   .econst          : > RAMLS5,    PAGE = 1
   .esysmem         : > RAMLS5,    PAGE = 1

   ramgs0           : > RAMGS8,    PAGE = 1
   ramgs1           : > RAMGS9,    PAGE = 1

#ifdef __TI_COMPILER_VERSION
   #if __TI_COMPILER_VERSION >= 15009000
    .TI.ramfunc : {} > RAMM0,      PAGE = 0
   #endif
#endif
   
   /* The following section definitions are for SDFM examples */        
   Filter1_RegsFile : > RAMGS10,    PAGE = 1, fill=0x1111
   Filter2_RegsFile : > RAMGS11,    PAGE = 1, fill=0x2222
   Filter3_RegsFile : > RAMGS12,    PAGE = 1, fill=0x3333
   Filter4_RegsFile : > RAMGS13,    PAGE = 1, fill=0x4444
   Difference_RegsFile : >RAMGS14,  PAGE = 1, fill=0x3333
}

- 阅读全文 -

centos应用笔记


操作系统:Centos7/Centos6.9


1.安装setup命令

# yum install steuptools

另外根据需要安装以下软件:
system-config-firewall-tui 防火墙配置
system-config-keyboard 键盘配置(其实没必要)
nysysv 启动项配置



登陆日志:

文件路径:/var/log/secure

成功登陆日志:

文件路径:/var/log/wtmp 该文件主要配合last和who命令使用
显示最近登陆用户

# who /var/log/wtmp

- 阅读全文 -

Nios II开发--BSP配置说明


文章摘要:
本文主要对于NIOS开发中,BSP各个选项及配置进行简单的说明;


enable_c_plus_plus
故名思义,C++支持使能选项,大概不到1KB的代码量,如果未用到C++语法的话,可以考虑关闭(一般很少用)

enable_clean_exit

enable_exit
1KB左右的代码量(准确地说是700字节)

enable_gprof
性能分析,大约2KB的代码量;

enable_instruction_reload_exceptions_api


eanble_lightweight_device_driver_api
使能轻量级设备驱动接口,使能后可以减小代码量(大约3K的空间),但会出现以下警告:
alt_main.c:155: warning: warning: close is not implemented and will always fail


enable_mul_div_emulation

enable_reduced_device_dirver
精简的设备驱动程序(大约占5KB空间)

enable_runtime_stack_checking

enable_sim_optimize
选中后可以减少300Byte代码量;


enable_small_c_library
简单的C语言库,使能后可节省大量RAM,对于内置ram运行时,显示极其重要,否则提示RAM不足,
对于SDRAM运行的土豪来说可随意;


enable_sopc_sysid_check

- 阅读全文 -

基于Linux的Tomcat部署


文章摘要:

Tomcat 服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选,本文主要针对Linux服务器下的安装部署做一个简单的说明;


操作系统:CentOS 7.2
软件版本:apache-tomcat-7.0.78


安装JDK
如果已经安装,可以略过该步骤;


安装tomcat

# wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.78/bin/apache-tomcat-7.0.78.tar.gz
# tar -xvf apache-tomcat-7.0.78.tar.gz -C /usr/local

启动tomcat

# ./startup.sh

运行测试
tomcat默认端口为,浏览器输入IP:8080,正常情况下,可以显示Welcome界面;

关闭tomcat

#./shutdown.sh

设置nginx代理

 server {
        listen 8000;
        server_name  jsp.oroct.com;

        root /var/www/tomcat;
        index index.jsp index.jspx index.do index.html;

        location ~ \.(jsp|jspx|do|action)?$ 
        {   
            proxy_set_header X-Forwarded-Host $host;
            proxy_set_header X-Forwarded-Server $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:8080;
        }
}

配置说明

修改网站根目录:
修改conf/service.xml文件,添加Context条目:

<Host ......>

    <Context path="" docBase="/var/www/tomcat" debug="0" reloadable="true" />

</Host>

path这二级域名,一般为空;
docBase指定网站根目录位置;

- 阅读全文 -


Copyright©2025 春天花会开, All Rights Reserved. Email: webmaster@oroct.com