鹏程万里------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

相关文章

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安