大丈夫能伸能屈。。。。。

1.gpio的功能定义在page875页

其实挺简单,就是前面加后面组成一个数字表明是第几个功能,比如如果要搞成canb_tx,那么就是0110换成10进制就是功能6,这个例子用在前一页的那些功能定义种。

2.In a typical application, the SPISTE pin serves as a chip-enable pin for a slave SPI device. This pin is
driven low by the master before transmitting data to the slave and is taken high after the transmission is
complete.这段话在page2052页,看起来似乎spi 会自动管控这个管教,只要定义成spi ste

3.下图是开发板的仿真器设置

先选basic的再选advance的

3.烧录程序:

烧录文件如下:

然后打开编译软件导入工程如下

点击load下载先,这是副cpu里的程序

然后

在右边

右键点击launchXXXXXXX

然后

选中c28xx右键connectXXXX

然后

然后点击load等待

选中那个out文件

然后等待下载完成即可

接下来说说28004的spi开发,我只做了flash读写相关,不过基本差不多

初始化spi gpio和controller

void initspib_gpio()
{
    EALLOW;
    GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;   // Enable pull-up on GPIO16 (SPISIMOA)
    GpioCtrlRegs.GPAPUD.bit.GPIO25 = 0;   // Enable pull-up on GPIO17 (SPISOMIA)
    GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0;   // Enable pull-up on GPIO56 (SPICLKA)
                    //GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pull-up on GPIO56 (SPICLKA)

GpioCtrlRegs.GPAQSEL2.bit.GPIO24 = 3; // Asynch input GPIO12 (SPISIMOA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO25 = 3; // Asynch input GPIO13 (SPISOMIA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; // Asynch input GPIO14 (SPICLKA)
                    //GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO14 (SPICLKA)

GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 2; // Configure GPIO12 as SPISIMOA
    GpioCtrlRegs.GPAMUX2.bit.GPIO25 = 2; // Configure GPIO13 as SPISOMIA
    GpioCtrlRegs.GPAMUX2.bit.GPIO26 = 2; // Configure GPIO14 as SPICLKA

GpioCtrlRegs.GPAGMUX2.bit.GPIO24 = 1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO25 = 1;
    GpioCtrlRegs.GPAGMUX2.bit.GPIO26 = 1;
                    //GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 6; // Configure GPIO14 as SPICLKA
                    //GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 1;

GpioCtrlRegs.GPAMUX2.bit.GPIO27 = 0; // Configure GPIO15 as SPISTEB
    GpioCtrlRegs.GPADIR.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
    GpioCtrlRegs.GPAQSEL2.bit.GPIO27 = 3; // Asynch input GPIO15 (SPISTEB)

SpibRegs.SPICCR.bit.SPISWRESET = 0;
    SpibRegs.SPICCR.bit.CLKPOLARITY = 1;
    SpibRegs.SPICCR.bit.SPICHAR = (8-1);
    SpibRegs.SPICCR.bit.SPILBK = 0;

SpibRegs.SPICTL.bit.MASTER_SLAVE = 1;
    SpibRegs.SPICTL.bit.TALK = 1;
    SpibRegs.SPICTL.bit.CLK_PHASE = 0;
    SpibRegs.SPICTL.bit.SPIINTENA = 0;

SpibRegs.SPIBRR.bit.SPI_BIT_RATE = SPI_BRR;
    SpibRegs.SPIPRI.bit.FREE = 1;
    SpibRegs.SPICCR.bit.SPISWRESET = 1;
    EDIS;

}

void SPI_flash_block_erase_64k(unsigned char *write_array)
{
    SPI_flash_write_enable();
    DELAY_US(1000);
    SPI_writeArray1(write_array,4);
}

void SPI_writeArray1(unsigned char *write_array,uint16_t length)
{
    int i;
    uint16_t tempData = 0;
    uint16_t tempData1 = 0;
       uint16_t spi_rw_delay_cnt;
       volatile struct SPI_REGS *p;
       GpioDataRegs.GPACLEAR.bit.GPIO27 = 1;
    for(i=0;i< length;i++)
    {
        //val = write_array[i];
        tempData |= write_array[i];
        tempData <<= 8;

p = &SpibRegs;
        spi_rw_delay_cnt = 0;
        while (1 == p->SPISTS.bit.BUFFULL_FLAG)
        {
                    if(++spi_rw_delay_cnt > 1000)
                    {
                        spi_rw_delay_cnt = 0;
                        break;
                    }

}
        //val1 = tempData;
        p->SPITXBUF = tempData;
        spi_rw_delay_cnt = 0;
        while (0 == p->SPISTS.bit.INT_FLAG)
        {
            if(++spi_rw_delay_cnt > 1000)
            {
                spi_rw_delay_cnt = 0;
                break;
            }
        }//SpiaRegs.SPISTS.bit.INT_FLAG ==1

tempData1 = p->SPIRXBUF;
          DELAY_US(20);
    }
    GpioDataRegs.GPADAT.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
}

// only for spi flash read
void SPI_readArray(unsigned char *write_array,unsigned char *read_array,uint16_t length)
{
    int i;
    uint16_t tempData = 0;
    uint16_t tempData1 = 0;
       uint16_t spi_rw_delay_cnt;
       volatile struct SPI_REGS *p;
       GpioDataRegs.GPACLEAR.bit.GPIO27 = 1;
    for(i=0;i< length;i++)
    {
       // val = write_array[i];
        tempData |= write_array[i];
        tempData <<= 8;

p = &SpibRegs;
        spi_rw_delay_cnt = 0;
                while (1 == p->SPISTS.bit.BUFFULL_FLAG)
                {
                    if(++spi_rw_delay_cnt > 1000)
                    {
                        spi_rw_delay_cnt = 0;
                        break;
                    }

}
              //  val1 = tempData;
        p->SPITXBUF = tempData;
        spi_rw_delay_cnt = 0;
        while (0 == p->SPISTS.bit.INT_FLAG)
        {
         if(++spi_rw_delay_cnt > 1000)
         {
         spi_rw_delay_cnt = 0;
         break;
         }
         }//SpiaRegs.SPISTS.bit.INT_FLAG ==1

tempData1 = p->SPIRXBUF;
        read_array[i] = (unsigned char)(tempData1 & 0xff);
    }
    GpioDataRegs.GPADAT.bit.GPIO27 = 1;
    GpioDataRegs.GPASET.bit.GPIO27 = 1;
}

上面的读写都是针对单个byte的哦

在读取内存数据时发现一个很奇怪的现象

bin_len_byte = (long)(*((int*)0x9F001))*65536 + *((int*)0x9F002);

在这个情况下,如果9f001里存任何值,结果都只会又9f002里的值,但是如果

bLenCnt = (*((int*)0x9F001))*65536;
    bLenCnt1 =  (*(int*)0x9F002)&0x0000FFFF;
    bin_len_byte = bLenCnt+bLenCnt1;

这个写法就正确,非常奇怪

鹏程万里------TI 28004开发相关推荐

  1. 基于Eclipse的TI集成开发环境IDE-CCSv5使用教程

    TI嵌入式处理器的集成开发环境(IDE)包括调试器,编译器,编辑器,DSP/BIOS操作系统等等,现在最新的CCSv5 IDE基于Eclipse开源软件框架(v4+)并融合了TI设备的支持与功能,适用 ...

  2. TI DAVINCI开发原理(总共5部分)

    2011-06-03 11:14:17|  分类: TI 达芬奇视频处 |  标签: |字号大中小  订阅 DAVINCI开发原理之一----ARM端开发环境的建立(DVEVM) 1. 对DAVINC ...

  3. 在TI DSP开发板中烧写Flash程序

    实现在FLASH存储器烧写程序一般有以下三种方法:一是通过编程器下载烧写:二是通过开发商提供的专门软件工具+在线仿真器烧写:三是自己编程通过DSP烧写.个人使用的是合众达电子SEED-VPM642开发 ...

  4. ti嵌入式开发板DY—Tiva-PB的调试日记——第一天

    博主是南航准大三,电气自动化专业的一名学生,有一点C51基础,电脑小白(其后你们可以看出来).暑假闲来无事,从老师那里搞了一块DY-Tiva-PB开发板.今天是第一天进行调试,在这里记录一下自己的心得 ...

  5. 为工业网关打造的TI AM335x开发板介绍

    MYD-C335X-GW 是米尔电子推出的基于TI AM335x 系列处理器的嵌入式板卡,主要面向工业网关,HMI 等应用场景.该套产品由核心板MYC-C335X-GW及底板MYB-C335X-GW组 ...

  6. TI AM3552开发板(arm cortex A8) 初体验

    1 开发板简介 采用周立功EPC-9600I-L工控板,TI Cortex-A8 AM3352处理器,主频高达800MHz.集成6路UART,支持GPS.GPRS.传感器.采集模块等功能扩展. 板载2 ...

  7. ti linux 开发环境,Ubuntu下搭建MSP430开发环境(MSPGCC)

    上回讲到已经成功编译了源代码,生成了可执行文件,接下来就是要连接仿真器,下载可执行文件了.mspgcc中连接仿真其用的是mspdebug(功能上类似与openocd),连接成功之后它也能够充当gdbs ...

  8. 板卡测评 | 基于TI AM5708开发板——ARM+DSP多核异构开发案例分享

    本次测评板卡是创龙科技旗下的TL570x-EVM,它是一款基于TI Sitara系列AM5708ARM Cortex-A15+浮点DSPC66x处理器设计的异构多核SOC评估板,由核心板和评估底板组成 ...

  9. cc2640软件用c语言开发,CC2640R2FTI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯...

    /** data_process.c * * Created on: 2018年7月5日 * Author: admin*/#include#include#include#include#inclu ...

最新文章

  1. finally 关键字
  2. stm32的PWM占空比
  3. Python 基础练习
  4. URL2Video:把网页自动创建为短视频
  5. java util包类_java.util包下的类及常用方法
  6. 编写python程序、创建名为class的数据库_python面向对象编程class1
  7. js函数提示 vscode_为VSCode / Monaco Intellisence添加JavaScript类型提示
  8. Jenkins的一些代码
  9. 二〇二二注定是踔厉奋发、笃行不怠的一年
  10. 春节前51Aspx源码发布详情
  11. 我希望我一开始就知道的5个Python功能
  12. jdbc至sql server的两种常见方法
  13. python成长之路--python的安装与配置 pycharm的安装与激活
  14. if语句、逻辑表达式、运算符
  15. java实现图片反色处理代码示例
  16. Libgdx游戏编程之卡牌游戏UI布局
  17. [剑指Offer]丑数[Python]
  18. 揭开Java上传下载功能的神秘面纱
  19. 安全防护与信息加密:一个新的挑战
  20. Win10系统Ping端口及利用telnet命令Ping 端口

热门文章

  1. .net standard类库同时兼容Framework和Core获取配置文件
  2. 怎么把两个音频合并在一起?
  3. 『C/C++养成计划』C++项目遇到Aborted (core dumped)的处理方法
  4. 超大计算机屏幕台历时钟,大屏幕日历时钟显示-系统.pdf
  5. go基础:字符串操作
  6. 反向放大电路并联电容与积分电路并联电阻的区别?
  7. Photoshop 图层合并机制之正片叠底
  8. 针对新冠肺炎微博热搜话题使用R语言进行文本特征提取的四种方法(二) —— 基于TF-IDF的特征提取
  9. 你所不知道的蓝牙适配器的好处
  10. canvas学习之五子棋规则法部分实现