鹏程万里------TI 28004开发

2024-09-04 00:38

本文主要是介绍鹏程万里------TI 28004开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134504

相关文章

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块