2823|10

2640

帖子

6

TA的资源

五彩晶圆(初级)

楼主
 

RT1052 (7) 驱动SPI-DAC [复制链接]

RT1052 (7) 驱动SPI-DAC

       首先在Bsp文件夹新建DAC目录,如下所示,因为是基于第4篇的工程文件,所以直接从第4篇下载工程文件即可。

 

图1:BSP文件夹

 

图2:放入DAC驱动

Dac .c文件

#include "AD5668.h"

/*

    Channel Selection Range 1~16

    Value Range 0~65535

*/

void DAC_Write(uint8_t channel,uint16_t Value)

{

    uint16_t Date,temp;

    if(channel<=8)

    {

        DAC_CS1_L;

        /* Select Channel */

        Date=WriteAndUpDateCh;

        Date<<=4;

        Date|=channel-1;

        Date<<=4;

        temp=Value>>12;

        Date|=temp;

        Soft_SPI_Write(Date);

        Date=Value<<4;

        Soft_SPI_Write(Date);

        DAC_CS1_H;

    }

    else

    {

        DAC_CS2_L;

        /* Select Channel */

        Date=WriteAndUpDateCh;

        Date<<=4;

        Date|=channel-9;

        Date<<=4;

        temp=Value>>12;

        Date|=temp;

        Soft_SPI_Write(Date);

        Date=Value<<4;

        Soft_SPI_Write(Date);

        DAC_CS2_H;

    }

}

/*

    Initial DAC GPIO

*/

void DAC_Init(void)

{

    GPIO_InitTypeDef GPIO_InitStruct;

    __HAL_RCC_GPIOC_CLK_ENABLE();

    GPIO_InitStruct.Pin = DAC_CLR_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

    GPIO_InitStruct.Pull = GPIO_PULLDOWN;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(DAC_CLR_PORT,&GPIO_InitStruct);

    DAC_CLR_L;

    /* OPEN INTERANL REFERENCE */

    DAC_CS1_L;

    Soft_SPI_Write(0x08f0);

    Soft_SPI_Write(0x0001);

    DAC_CS1_H;

    DAC_CS2_L;

    Soft_SPI_Write(0x08f0);

    Soft_SPI_Write(0x0001);

    DAC_CS2_H;

}

 

 

Dac.h文件

#ifndef __AD5668_H

#define __AD5668_H

#include "main.h"

#include "STM32_SPI.h"

/*

    AD5668 COMMAND AND ADDRESS

    MSB

    31 30 29 28  27 26 25 24

    X   X  X  X  C3 C2 C1 C0

    23 22 21 20  19         ->      5

    A3 A2 A1 A0  Data Msb-> DataLSB

    4 3 2 1

    X X X X

*/

/*

    COMMAND

*/

#define  UpdateDacReg               0X01

#define  WriteAndUpDateCh       0x03    

#define  ResetDac                       0x07

#define  SetUpRef                       0x80

/*

    ADDRESS  

*/

#define  ChannelA                       0X00

#define  ChannelB                       0X01

#define  ChannelC                       0X02

#define  ChannelD                       0X03

#define  ChannelE                       0X04

#define  ChannelF                       0X05

#define  ChannelG                       0X06

#define  ChannelH                       0X07

#define  ChannelAll                 0X0F

/*

    Ctrl GPIO redefine

*/

#define  DAC_CS1_L          SF_NSS1_L

#define  DAC_CS1_H          SF_NSS1_H

#define  DAC_CS2_L          SF_NSS2_L

#define  DAC_CS2_H          SF_NSS2_H

#define  DAC_CLR_PORT       GPIOC

#define  DAC_CLR_PIN        GPIO_PIN_13

#define  DAC_CLR_H          HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_SET)

#define  DAC_CLR_L          HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_RESET)

/*

    Channel Selection Range 1~8

    Value Range 0~65535

*/

void DAC_Init(void);

void DAC_Write(uint8_t channel,uint16_t Value);

#endif

 

 

       因为是拷贝之前STM32的驱动,所以还要进行一些修改,先不管。

 

图3:在User里面添加驱动

 

图4:添加头文件路径1

 

图5:添加头文件路径2

因为是修改STM32的驱动,其本质没有啥差别,从RT1052(2)工具生成代码 那个章节直接copy代码过来就行。

Bsp_lpspi.c文件

#include "fsl_iomuxc.h"

#include "fsl_gpio.h"

#include "fsl_lpspi.h"

#include "pad_config.h"

#include "bsp_lpspi.h"

 

 

static void LPSPI_GPIO_Init(void);

 

static void LPSPI_GPIO_Init(void)

{

     IOMUXC_SetPinMux(

      IOMUXC_GPIO_AD_B0_00_LPSPI3_SCK,        /* GPIO_AD_B0_00 is configured as LPSPI3_SCK */

      0U);                                    /* Software Input On Field: Input Path is determined by functionality */

  IOMUXC_SetPinMux(

      IOMUXC_GPIO_AD_B0_01_LPSPI3_SDO,        /* GPIO_AD_B0_01 is configured as LPSPI3_SDO */

      0U);                                    /* Software Input On Field: Input Path is determined by functionality */

  IOMUXC_SetPinMux(

      IOMUXC_GPIO_AD_B0_02_LPSPI3_SDI,        /* GPIO_AD_B0_02 is configured as LPSPI3_SDI */

      0U);                                    /* Software Input On Field: Input Path is determined by functionality */

  IOMUXC_SetPinMux(

      IOMUXC_GPIO_AD_B0_03_LPSPI3_PCS0,       /* GPIO_AD_B0_03 is configured as LPSPI3_PCS0 */

      0U);

}

void LPSPI_Init(void)

{

    //config Lpspi clock

    CLOCK_SetMux(kCLOCK_LpspiMux, 3);

    CLOCK_SetDiv(kCLOCK_LpspiDiv, 7U);

    //initial Gpio config

    LPSPI_GPIO_Init();

    //initial lpspi config

    lpspi_master_config_t config;

 

    LPSPI_MasterGetDefaultConfig(&config);

    //config lpspi cs pin

    config.whichPcs=kLPSPI_Pcs0;

 

    LPSPI_MasterInit(LPSPI3, &config, LPSPI3_CLOCK_FREQ);

}

void Lpspi_Write(uint8_t datasize,uint8_t *data)

{

    lpspi_transfer_t spi_tranxfer;

    spi_tranxfer.configFlags=kLPSPI_MasterPcs0|kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;

    spi_tranxfer.txData=data; //要发送的数据

    spi_tranxfer.rxData=NULL;

    spi_tranxfer.dataSize=datasize; //数据长度

    LPSPI_MasterTransferBlocking(LPSPI3, &spi_tranxfer);

}

Bsp_lpspi.h文件

#ifndef __BSP_LPSPI_H

#define __BSP_LPSPI_H

 

#include "fsl_common.h"

 

 

 

#define LPSPI3_CLOCK_FREQ 6000000UL

 

 

void LPSPI_Init(void);

void DAC_Write(uint8_t channel,uint16_t Value);

 

#endif /* __BSP_LPSPI_H */

 

Github 地址:

https://github.com/xutong-analog/fantasy/tree/main/RT1052/lpspi

测试下驱动波形

 

图6:lpspi驱动波形

再给AD5668套层壳

AD5668.C

#include "AD5668.h"

#include "board.h"

/*

       Channel Selection Range 1~16

       Value Range 0~65535

*/

void DAC_Write(uint8_t channel,uint16_t Value)

{

      

        uint8_t data[4];

        data[0]=WriteAndUpDateCh;

        data[1]=(Value>>12)|channel;

        data[2]=(Value>>4)&0x00ff;

        data[3]=(Value&0x000f)<<4;

       

        Lpspi_Write(4,data);

 

}

/*

       Initial DAC GPIO

*/

void DAC_Init(void)

{

 

       //DAC_CLR_L;

       /* OPEN INTERANL REFERENCE */

        uint8_t data[4]={0x08,0xf0,0x00,0x01};

        Lpspi_Write(4,data);

 

}

 

AD5668.H

#ifndef __AD5668_H

#define __AD5668_H

#include "bsp_lpspi.h"

/*

       AD5668 COMMAND AND ADDRESS

       MSB

       31 30 29 28  27 26 25 24

       X   X  X  X  C3 C2 C1 C0

       23 22 21 20  19         ->         5

       A3 A2 A1 A0  Data Msb-> DataLSB

       4 3 2 1

       X X X X

*/

/*

       COMMAND

*/

#define  UpdateDacReg                          0X01

#define  WriteAndUpDateCh                   0x03      

#define   ResetDac                           0x07

#define   SetUpRef                           0x80

/*

       ADDRESS 

*/

#define  ChannelA                                        0X00

#define  ChannelB                                         0X10

#define  ChannelC                                        0X20

#define  ChannelD                                        0X30

#define  ChannelE                                         0X40

#define  ChannelF                                         0X50

#define  ChannelG                                        0X60

#define  ChannelH                                        0X70

#define  ChannelAll                                0XF0

/*

       Ctrl GPIO redefine

*/

#define  DAC_CS1_L                 SF_NSS1_L

#define  DAC_CS1_H                SF_NSS1_H

 

#define  DAC_CLR_PIN                     GPIO_PIN_13

#define   DAC_CLR_H               HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_SET)

#define   DAC_CLR_L                HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_RESET)

 

 

 

 

/*

       Channel Selection Range 1~8

       Value Range 0~65535

*/

void DAC_Init(void);

void DAC_Write(uint8_t channel,uint16_t Value);

 

#endif

掏出开发板

 

图7:DAC开发板

 

图8:DAC输出结果

 

图9:测试环境

参考文档:

Eeworld 10*10的洞洞板—xutong

Eeworld RT1052(2)工具生成代码 —xutong

Adi ad5668 datasheet

 

此帖出自NXP MCU论坛

最新回复

哈哈,好吧   详情 回复 发表于 2023-4-24 09:24
点赞 关注
个人签名

希望做一些大家觉得好用的东西!

 

回复
举报

2640

帖子

6

TA的资源

五彩晶圆(初级)

沙发
 
RTT NANO.7z (20.82 MB, 下载次数: 6)
此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

板凳
 

https://github.com/xutong-analog/fantasy/tree/main/RT1052

github地址

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

4
 

更新驱动代码:

#include "AD5668.h"
#include "board.h"
#include "bsp_lpspi.h"
/*
	Channel Selection Range 1~16
	Value Range 0~65535
*/
void DAC_Write(uint8_t channel,uint16_t Value)
{
    uint8_t data[4];
     //command modify
    data[0]=WriteToReg;
    //WriteAndUpDateCh
    // command modify
    data[1]=(Value>>12)|channel;
    data[2]=(Value>>4)&0x00ff;
    data[3]=(Value&0x000f)<<4;
    
    Lpspi_Write(4,data);

}
void DAC_Command_Write(uint8_t Command,uint8_t channel,uint16_t Value)
{
    uint8_t data[4];
     //command modify
    data[0]=Command;
    //WriteAndUpDateCh
    // command modify
    data[1]=(Value>>12)|channel;
    data[2]=(Value>>4)&0x00ff;
    data[3]=(Value&0x000f)<<4;
    
    Lpspi_Write(4,data);

}
/*
	Initial DAC GPIO
*/
void DAC_Init(void)
{

    //DAC_CLR_L;                                                                                                                                                                                                                                                                                                                                                                                                                       
    /* OPEN INTERANL REFERENCE */
    uint8_t data[4]={0x08,0xf0,0x00,0x01};
    Lpspi_Write(4,data);

}
void DAC_Reset(void)
{
    // no significance data
    uint8_t data[4]={0x00,0xf0,0x00,0x01};
     //command modify
    data[0]=ResetDac;
    Lpspi_Write(4,data);

}
void SoftLdac(void)
{
   
    uint8_t data[4]={0x06,0x00,0x00,0xFF};
    Lpspi_Write(4,data);

}

 

#ifndef __AD5668_H
#define __AD5668_H
#include "bsp_lpspi.h"
/*
	AD5668 COMMAND AND ADDRESS
	MSB
	31 30 29 28  27 26 25 24
	X   X  X  X  C3 C2 C1 C0
	23 22 21 20  19 		-> 		5 
	A3 A2 A1 A0  Data Msb-> DataLSB
	4 3 2 1
	X X X X
*/
/*
	COMMAND 
*/
#define  WriteToReg			        0X00
#define  UpdateDacReg				0X01
#define  WriteAndUpDateAll			0X02
#define  WriteAndUpDateCh		        0x03	
#define  PowerDownAndPowerUpDac		        0x04
#define  loadClearReg		                0x05
#define  loadLdacReg		                0x06
#define	 ResetDac				0x07
#define	 SetUpRef				0x80
/*
	ADDRESS  
*/
#define  ChannelA						0X00
#define  ChannelB						0X10
#define  ChannelC						0X20
#define  ChannelD						0X30
#define  ChannelE						0X40
#define  ChannelF						0X50
#define  ChannelG						0X60
#define  ChannelH						0X70
#define  ChannelAll					0XF0
/*
	Ctrl GPIO redefine
*/
#define  DAC_CS1_L			SF_NSS1_L
#define  DAC_CS1_H			SF_NSS1_H

#define  DAC_CLR_PIN		        GPIO_PIN_13
#define	 DAC_CLR_H			HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_SET)
#define	 DAC_CLR_L			HAL_GPIO_WritePin(DAC_CLR_PORT,DAC_CLR_PIN,GPIO_PIN_RESET)




/*
	Channel Selection Range 1~8
	Value Range 0~65535
*/
void DAC_Init(void);
void DAC_Write(uint8_t channel,uint16_t Value);
void DAC_Command_Write(uint8_t Command,uint8_t channel,uint16_t Value);
void DAC_Reset(void);
void SoftLdac(void);
#endif

 

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

5
 

再次更新驱动代码:

#include "fsl_iomuxc.h"
#include "fsl_gpio.h" 
#include "fsl_lpspi.h"
#include "pad_config.h" 
#include "bsp_lpspi.h"


static void LPSPI_GPIO_Init(void);

static void LPSPI_GPIO_Init(void)
{
     IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B0_00_LPSPI3_SCK,        /* GPIO_AD_B0_00 is configured as LPSPI3_SCK */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
  IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B0_01_LPSPI3_SDO,        /* GPIO_AD_B0_01 is configured as LPSPI3_SDO */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */
  IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B0_02_LPSPI3_SDI,        /* GPIO_AD_B0_02 is configured as LPSPI3_SDI */
      0U);                                    /* Software Input On Field: Input Path is determined by functionality */                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           
  IOMUXC_SetPinMux(
      IOMUXC_GPIO_AD_B0_03_LPSPI3_PCS0,       /* GPIO_AD_B0_03 is configured as LPSPI3_PCS0 */
      0U);
}
void LPSPI_Init(void) 
{
    //config Lpspi clock
    CLOCK_SetMux(kCLOCK_LpspiMux, 3);
    CLOCK_SetDiv(kCLOCK_LpspiDiv, 7U);
    //initial Gpio config
    LPSPI_GPIO_Init();
    //initial lpspi config
    lpspi_master_config_t config;

    LPSPI_MasterGetDefaultConfig(&config);
    //config lpspi cs pin
    config.whichPcs=kLPSPI_Pcs0;
   // config.cpol=kLPSPI_ClockPolarityActiveLow;
    // 使用ADX112 直接使用此配置
    config.cpha=kLPSPI_ClockPhaseSecondEdge;
    LPSPI_MasterInit(LPSPI3, &config, LPSPI3_CLOCK_FREQ);
}
//写数据
void Lpspi_Write(uint8_t datasize,uint8_t *data)
{
    lpspi_transfer_t spi_tranxfer;
    spi_tranxfer.configFlags=kLPSPI_MasterPcs0|kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
    spi_tranxfer.txData=data; //要发送的数据
    spi_tranxfer.rxData=NULL;
    spi_tranxfer.dataSize=datasize; //数据长度
    LPSPI_MasterTransferBlocking(LPSPI3, &spi_tranxfer);
}
//读写数据
void Lpspi_Read(uint8_t datasize,uint8_t *data,uint8_t *Rxdata)
{       
    lpspi_transfer_t spi_tranxfer;
    spi_tranxfer.configFlags=kLPSPI_MasterPcs0|kLPSPI_MasterPcsContinuous | kLPSPI_MasterByteSwap;
    spi_tranxfer.txData=data; //要发送的数据
    spi_tranxfer.rxData=Rxdata; //要接收的数据
    spi_tranxfer.dataSize=datasize; //数据长度
    LPSPI_MasterTransferBlocking(LPSPI3, &spi_tranxfer);
 
}

#ifndef __BSP_LPSPI_H
#define __BSP_LPSPI_H

#include "fsl_common.h"



#define LPSPI3_CLOCK_FREQ 6000000UL


void LPSPI_Init(void);
//xue
void Lpspi_Write(uint8_t datasize,uint8_t *data);
void Lpspi_Read(uint8_t datasize,uint8_t *data,uint8_t *Rxdata);

#endif /* __BSP_LPSPI_H */

可以直接驱动ADX112

/**
  ******************************************************************************
  * [url=home.php?mod=space&uid=1307177]@File[/url] main.c
  * [url=home.php?mod=space&uid=1315547]@author[/url] fire
  * [url=home.php?mod=space&uid=252314]@version[/url] V1.0
  * [url=home.php?mod=space&uid=311857]@date[/url] 2018-xx-xx
  * [url=home.php?mod=space&uid=159083]@brief[/url] GPIO输入—按键中断检测
  ******************************************************************************
  * [url=home.php?mod=space&uid=1020061]@attention[/url] *
  * 实验平台:野火  i.MXRT1052开发板 
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */
#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_gpio.h"
#include "fsl_gpt.h"
#include "fsl_lpspi.h"
#include "fsl_iomuxc.h"
#include "pad_config.h"  
#include "pin_mux.h"
#include "clock_config.h"
#include "fsl_lpi2c.h"
#include "./bsp/nvic/bsp_nvic.h"
#include "./bsp/led/bsp_led.h"
#include "./bsp/key/bsp_key_it.h"
#include "ad5668.h"
#include "fsl_adc.h"

#include "rtthread.h"
#include "bsp_lpspi.h"
#include "bsp_lpi2c.h"
#include "AnalogysemiCSD.h"
// 添加adc的返回值用于打印
volatile uint16_t ADC_Value;

uint8_t datas[]={0x04,0x9A,0x04,0X9A};
uint8_t Rdatas[2];

/*******************************************************************kkokkkkkkkkkkk
 * Prototypes
 *******************************************************************/
/**
 * @brief 延时一段时间
 */


void delay(uint32_t count);

/*******************************************************************
 * Code
 *******************************************************************/
/**
 * @note 本函数在不同的优化模式下延时时间不同,
 *       如flexspi_nor_debug和flexspi_nor_release版本的程序中,
 *       flexspi_nor_release版本的延时要短得多  
 */ 
void delay(uint32_t count)
{ 
    volatile uint32_t i = 0;
    for (i = 0; i < count; ++i)
    {
        __asm("NOP"); /* 调用nop空指令 */
         __asm("NOP"); /* 调用nop空指令 */
          __asm("NOP"); /* 调用nop空指令 */
           __asm("NOP"); /* 调用nop空指令 */
            __asm("NOP"); /* 调用nop空指令 */
    }
}
// 步骤2:新建ADC初始化函数
void RT1052_ADC_Init(void)
{
   adc_config_t adcConfigStruct;
   adc_channel_config_t adcChannelConfigStruct;
      /*
     *  config->enableAsynchronousClockOutput = true;
     *  config->enableOverWrite =               false;
     *  config->enableContinuousConversion =    false;
     *  config->enableHighSpeed =               false;
     *  config->enableLowPower =                false;
     *  config->enableLongSample =              false;
     *  config->referenceVoltageSource =        kADC_ReferenceVoltageSourceVref;
     *  config->samplePeriodMode =              kADC_SamplePeriod2or12Clocks;
     *  config->clockSource =                   kADC_ClockSourceAD;
     *  config->clockDriver =                   kADC_ClockDriver1;
     *  config->resolution =                    kADC_Resolution12Bit;
     */
    ADC_GetDefaultConfig(&adcConfigStruct);
    //最大resolution 12bit 只有外部参考
    //adcConfigStruct.referenceVoltageSource=kADC_ReferenceVoltageSourceAlt0;
    //开启连续转换模式
    adcConfigStruct.enableContinuousConversion=true;
    ADC_Init(ADC1, &adcConfigStruct);
    //开启ADC中断
    EnableIRQ(ADC1_IRQn);
    //开启ADC1 自动校准
    ADC_DoAutoCalibration(ADC1);
    //关闭硬件触发
    ADC_EnableHardwareTrigger(ADC1, false);
    //读取通道0
    adcChannelConfigStruct.channelNumber                        = 0;
    
    adcChannelConfigStruct.enableInterruptOnConversionCompleted = true;
    // Channe_group  0 用于软件或者硬件出发
    ADC_SetChannelConfig(ADC1, 0u /*ADC_CHANNEL_GROUP*/, &adcChannelConfigStruct);
       
}
// ADC 中断入口函数
void  ADC1_IRQHandler(void)
{
  ADC_Value= ADC_GetChannelConversionValue(ADC1, 0U);
  rt_kprintf("ADC_Value :%d\r\n",ADC_Value);
  
}


/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */


 
int main(void)
{
   // uint16_t BusVoltage;
    rt_kprintf("hello analogysemi \r\n");	
    User_GPIO_Init();
    LPSPI_Init();

    Lpspi_Read(4,datas,Rdatas);
    while(1)
    {  


         Lpspi_Read(4,datas,Rdatas);
        rt_thread_mdelay(10);
         Lpspi_Read(4,datas,Rdatas);
        rt_thread_mdelay(10);

    }     

}


/*********************************************END OF FILE**********************/




ADX112 测温结果输出

 

 

 

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

6
 
/**
  ******************************************************************************
  * [url=home.php?mod=space&uid=1307177]@File[/url] main.c
  * [url=home.php?mod=space&uid=1315547]@author[/url] fire
  * [url=home.php?mod=space&uid=252314]@version[/url] V1.0
  * [url=home.php?mod=space&uid=311857]@date[/url] 2018-xx-xx
  * [url=home.php?mod=space&uid=159083]@brief[/url] GPIO输入—按键中断检测
  ******************************************************************************
  * [url=home.php?mod=space&uid=1020061]@attention[/url] *
  * 实验平台:野火  i.MXRT1052开发板 
  * 论坛    :http://www.firebbs.cn
  * 淘宝    :http://firestm32.taobao.com
  *
  ******************************************************************************
  */
#include "board.h"
#include "fsl_debug_console.h"
#include "fsl_gpio.h"
#include "fsl_gpt.h"
#include "fsl_lpspi.h"
#include "fsl_iomuxc.h"
#include "pad_config.h"  
#include "pin_mux.h"
#include "clock_config.h"
#include "fsl_lpi2c.h"
#include "./bsp/nvic/bsp_nvic.h"
#include "./bsp/led/bsp_led.h"
#include "./bsp/key/bsp_key_it.h"
#include "ad5668.h"
#include "fsl_adc.h"

#include "rtthread.h"
#include "bsp_lpspi.h"
// 添加adc的返回值用于打印
volatile uint16_t ADC_Value;

/*******************************************************************kkokkkkkkkkkkk
 * Prototypes
 *******************************************************************/
/**
 * @brief 延时一段时间
 */


void delay(uint32_t count);

/*******************************************************************
 * Code
 *******************************************************************/
/**
 * @note 本函数在不同的优化模式下延时时间不同,
 *       如flexspi_nor_debug和flexspi_nor_release版本的程序中,
 *       flexspi_nor_release版本的延时要短得多  
 */ 
void delay(uint32_t count)
{ 
    volatile uint32_t i = 0;
    for (i = 0; i < count; ++i)
    {
        __asm("NOP"); /* 调用nop空指令 */
         __asm("NOP"); /* 调用nop空指令 */
          __asm("NOP"); /* 调用nop空指令 */
           __asm("NOP"); /* 调用nop空指令 */
            __asm("NOP"); /* 调用nop空指令 */
    }
}
// 步骤2:新建ADC初始化函数
void RT1052_ADC_Init(void)
{
   adc_config_t adcConfigStruct;
   adc_channel_config_t adcChannelConfigStruct;
      /*
     *  config->enableAsynchronousClockOutput = true;
     *  config->enableOverWrite =               false;
     *  config->enableContinuousConversion =    false;
     *  config->enableHighSpeed =               false;
     *  config->enableLowPower =                false;
     *  config->enableLongSample =              false;
     *  config->referenceVoltageSource =        kADC_ReferenceVoltageSourceVref;
     *  config->samplePeriodMode =              kADC_SamplePeriod2or12Clocks;
     *  config->clockSource =                   kADC_ClockSourceAD;
     *  config->clockDriver =                   kADC_ClockDriver1;
     *  config->resolution =                    kADC_Resolution12Bit;
     */
    ADC_GetDefaultConfig(&adcConfigStruct);
    //最大resolution 12bit 只有外部参考
    //adcConfigStruct.referenceVoltageSource=kADC_ReferenceVoltageSourceAlt0;
    //开启连续转换模式
    adcConfigStruct.enableContinuousConversion=true;
    ADC_Init(ADC1, &adcConfigStruct);
    //开启ADC中断
    EnableIRQ(ADC1_IRQn);
    //开启ADC1 自动校准
    ADC_DoAutoCalibration(ADC1);
    //关闭硬件触发
    ADC_EnableHardwareTrigger(ADC1, false);
    //读取通道0
    adcChannelConfigStruct.channelNumber                        = 0;
    
    adcChannelConfigStruct.enableInterruptOnConversionCompleted = true;
    // Channe_group  0 用于软件或者硬件出发
    ADC_SetChannelConfig(ADC1, 0u /*ADC_CHANNEL_GROUP*/, &adcChannelConfigStruct);
       
}
// ADC 中断入口函数
void  ADC1_IRQHandler(void)
{
  ADC_Value= ADC_GetChannelConversionValue(ADC1, 0U);
  rt_kprintf("ADC_Value :%d\r\n",ADC_Value);
  
}



/**
  * @brief  主函数
  * @param  无
  * @retval 无
  */


 int main(void)
{
  
    rt_kprintf("hello analogysemi \r\n");	
    User_GPIO_Init();
    LPSPI_Init();
//    RT1052_ADC_Init();
//        //读取通道0
//    adc_channel_config_t adcChannelConfigStruct;
//    adcChannelConfigStruct.channelNumber                        = 0;
//    adcChannelConfigStruct.enableInterruptOnConversionCompleted = true;
     DAC_Init();
     rt_thread_mdelay(1);
    while(1)
    {  
//      RGB_RED_LED_ON;
//  

    DAC_Write(ChannelA,0x55aa);
         rt_thread_mdelay(10);
     DAC_Write(ChannelA,0xaa55);

     rt_thread_mdelay(10);
     
//       ADC_SetChannelConfig(ADC1, 0u /*ADC_CHANNEL_GROUP*/, &adcChannelConfigStruct);
//      rt_thread_mdelay(500);
    }     

}


/*********************************************END OF FILE**********************/




主程序

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

7
 

这个波形看起来不太干净呢?

此帖出自NXP MCU论坛

点评

线飞来飞去,接地没夹好  详情 回复 发表于 2023-4-22 09:33
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

8
 
freebsder 发表于 2023-4-21 23:19 这个波形看起来不太干净呢?

线飞来飞去,接地没夹好

此帖出自NXP MCU论坛

点评

哈哈,好吧  详情 回复 发表于 2023-4-24 09:24
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

7608

帖子

18

TA的资源

五彩晶圆(高级)

9
 
xutong 发表于 2023-4-22 09:33 线飞来飞去,接地没夹好

哈哈,好吧

此帖出自NXP MCU论坛

点评

快速验下,快速搞下个东西  详情 回复 发表于 2023-4-24 11:05
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

10
 

快速验下,快速搞下个东西

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复

2640

帖子

6

TA的资源

五彩晶圆(初级)

11
 
/*
  analogysemi
  xutong 2023/10/19
*/
#ifndef __BSP_LPSPI_H
#define __BSP_LPSPI_H

#include "stm32h7xx_hal.h"


#define SPIx                             SPI1
#define SPIx_CLK_ENABLE()                __HAL_RCC_SPI1_CLK_ENABLE()
#define SPIx_SCK_GPIO_CLK_ENABLE()       __HAL_RCC_GPIOB_CLK_ENABLE()
#define SPIx_MISO_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOB_CLK_ENABLE()
#define SPIx_MOSI_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOB_CLK_ENABLE()

#define SPIx_CS_GPIO_CLK_ENABLE()      __HAL_RCC_GPIOB_CLK_ENABLE()
/* Definition for SPIx Pins */
#define SPIx_SCK_PIN                     GPIO_PIN_3
#define SPIx_SCK_GPIO_PORT               GPIOB
#define SPIx_SCK_AF                      GPIO_AF5_SPI1
#define SPIx_MISO_PIN                    GPIO_PIN_4
#define SPIx_MISO_GPIO_PORT              GPIOB
#define SPIx_MISO_AF                     GPIO_AF5_SPI1
#define SPIx_MOSI_PIN                    GPIO_PIN_5
#define SPIx_MOSI_GPIO_PORT              GPIOB
#define SPIx_MOSI_AF                     GPIO_AF5_SPI1

#define SPIx_CS_PIN                      GPIO_PIN_6
#define SPIx_CS_GPIO_PORT                GPIOB




void LPSPI_Init(void);

void Lpspi_Write(uint8_t datasize,uint8_t *data);
void Lpspi_Read(uint8_t datasize,uint8_t *data,uint8_t *Rxdata);

#endif /* __BSP_LPSPI_H */
#include "bsp_lpspi.h"
SPI_HandleTypeDef SpiHandle;

void Spi_delay(uint32_t count)
{ 
    volatile uint32_t i = 0;
    for (i = 0; i < count; ++i)
    {
        __asm("NOP"); /* 调用nop空指令 */
         __asm("NOP"); /* 调用nop空指令 */
          __asm("NOP"); /* 调用nop空指令 */
           __asm("NOP"); /* 调用nop空指令 */
            __asm("NOP"); /* 调用nop空指令 */
    }
}
void LPSPI_Init(void)
{
    
    GPIO_InitTypeDef  GPIO_InitStruct;
    /* Enable SPI1 clock */
    SPIx_CLK_ENABLE();
    SPIx_SCK_GPIO_CLK_ENABLE();
    SPIx_MISO_GPIO_CLK_ENABLE();
    SPIx_MOSI_GPIO_CLK_ENABLE();
    SPIx_CS_GPIO_CLK_ENABLE();
    
    

    /* 初始化GPIO 配置*/
    /*##-1- Configure peripheral GPIO ##########################################*/
    /* SPI SCK GPIO pin configuration  */
    GPIO_InitStruct.Pin       = SPIx_SCK_PIN;
    GPIO_InitStruct.Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull      = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_HIGH;
    GPIO_InitStruct.Alternate = SPIx_SCK_AF;
    HAL_GPIO_Init(SPIx_SCK_GPIO_PORT, &GPIO_InitStruct);

    /* SPI MISO GPIO pin configuration  */
    GPIO_InitStruct.Pin = SPIx_MISO_PIN;
    GPIO_InitStruct.Alternate = SPIx_MISO_AF;
    HAL_GPIO_Init(SPIx_MISO_GPIO_PORT, &GPIO_InitStruct);

    /* SPI MOSI GPIO pin configuration  */
    GPIO_InitStruct.Pin = SPIx_MOSI_PIN;
    GPIO_InitStruct.Alternate = SPIx_MOSI_AF;
    HAL_GPIO_Init(SPIx_MOSI_GPIO_PORT, &GPIO_InitStruct);
    
   /* SPI CS GPIO pin configuration  */
    GPIO_InitStruct.Pin = SPIx_CS_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull      = GPIO_PULLDOWN;
    GPIO_InitStruct.Speed     = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(SPIx_CS_GPIO_PORT, &GPIO_InitStruct);
    
      /* 初始化SPI 配置*/
     /*##-2- Configure the SPI peripheral #######################################*/
    /* Set the SPI parameters */
    SpiHandle.Instance               = SPIx;
    SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
    SpiHandle.Init.Direction         = SPI_DIRECTION_2LINES;
    SpiHandle.Init.CLKPhase          = SPI_PHASE_1EDGE;
    SpiHandle.Init.CLKPolarity       = SPI_POLARITY_HIGH;
    SpiHandle.Init.DataSize          = SPI_DATASIZE_8BIT;
    SpiHandle.Init.FirstBit          = SPI_FIRSTBIT_MSB;
    SpiHandle.Init.TIMode            = SPI_TIMODE_DISABLE;
    SpiHandle.Init.CRCCalculation    = SPI_CRCCALCULATION_DISABLE;
    SpiHandle.Init.CRCPolynomial     = 7;
    SpiHandle.Init.NSS               = SPI_NSS_SOFT;
    SpiHandle.Init.Mode              = SPI_MODE_MASTER;
    //初始化SPI
    HAL_SPI_Init(&SpiHandle);
    //默认拉高CS引脚
    HAL_GPIO_WritePin(SPIx_CS_GPIO_PORT,SPIx_CS_PIN,GPIO_PIN_SET);

}
void Lpspi_Write(uint8_t datasize,uint8_t *data)
{
  
  //写数据
  HAL_GPIO_WritePin(SPIx_CS_GPIO_PORT,SPIx_CS_PIN,GPIO_PIN_RESET);
  HAL_SPI_Transmit(&SpiHandle,data, datasize, 5000);
  Spi_delay(30);
  HAL_GPIO_WritePin(SPIx_CS_GPIO_PORT,SPIx_CS_PIN,GPIO_PIN_SET);
}
void Lpspi_Read(uint8_t datasize,uint8_t *data,uint8_t *Rxdata)
{
//  读写数据
  HAL_GPIO_WritePin(SPIx_CS_GPIO_PORT,SPIx_CS_PIN,GPIO_PIN_RESET);
  HAL_SPI_TransmitReceive(&SpiHandle,data,Rxdata, datasize, 5000);
  Spi_delay(30);
  HAL_GPIO_WritePin(SPIx_CS_GPIO_PORT,SPIx_CS_PIN,GPIO_PIN_SET);
}

 

转换为STM32能用的头文件

此帖出自NXP MCU论坛
 
个人签名

希望做一些大家觉得好用的东西!

 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表