/* Copyright Statement:
*
* This software/firmware and related documentation ("AutoChips Software") are
* protected under relevant copyright laws. The information contained herein is
* confidential and proprietary to AutoChips Inc. and/or its licensors. Without
* the prior written permission of AutoChips inc. and/or its licensors, any
* reproduction, modification, use or disclosure of AutoChips Software, and
* information contained herein, in whole or in part, shall be strictly
* prohibited.
*
* AutoChips Inc. (C) 2020. All rights reserved.
*
* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("AUTOCHIPS SOFTWARE")
* RECEIVED FROM AUTOCHIPS AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
* ON AN "AS-IS" BASIS ONLY. AUTOCHIPS EXPRESSLY DISCLAIMS ANY AND ALL
* WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
* WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
* NONINFRINGEMENT. NEITHER DOES AUTOCHIPS PROVIDE ANY WARRANTY WHATSOEVER WITH
* RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
* INCORPORATED IN, OR SUPPLIED WITH THE AUTOCHIPS SOFTWARE, AND RECEIVER AGREES
* TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
* RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
* OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN AUTOCHIPS
* SOFTWARE. AUTOCHIPS SHALL ALSO NOT BE RESPONSIBLE FOR ANY AUTOCHIPS SOFTWARE
* RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND AUTOCHIPS'S
* ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE AUTOCHIPS SOFTWARE
* RELEASED HEREUNDER WILL BE, AT AUTOCHIPS'S OPTION, TO REVISE OR REPLACE THE
* AUTOCHIPS SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
* CHARGE PAID BY RECEIVER TO AUTOCHIPS FOR SUCH AUTOCHIPS SOFTWARE AT ISSUE.
*/
/*!
* @file ac780x_i2c.c
*
* @brief This file provides i2c integration functions.
*
*/
/* =========================================== Includes =========================================== */
#include "ac780x_i2c_reg.h"
#include "ac780x_dma_reg.h"
/* ============================================ Define ============================================ */
/* =========================================== Typedef ============================================ */
/* ========================================== Variables =========================================== */
/* i2c info */
const I2C_INFOType g_i2cInfoPool[] =
{
{I2C0, I2C0_IRQn, CLK_I2C0, SRST_I2C0},
{I2C1, I2C1_IRQn, CLK_I2C1, SRST_I2C1},
};
/* I2C callback pointer array */
static DeviceCallback_Type s_i2cCallback[I2C_INSTANCE_MAX] = {(DeviceCallback_Type)NULL};
#ifdef I2C_USE_INTERRUPT_TRANSMIT
/* transmit information struct */
I2C_TransmitType g_i2cTransmitInfo[I2C_INSTANCE_MAX] = {0};
/* transmit status enum */
uint32_t g_i2cStatus[I2C_INSTANCE_MAX] = {I2C_TRANSMIT_STATUS_ERROR_NULL};
/* internal callback function */
static void I2C_MasterSlaveIntHandler(void *device, uint32_t wparam, uint32_t lparam);
#endif /* I2C_USE_INTERRUPT_TRANSMIT */
/* ==================================== Functions declaration ===================================== */
/* ====================================== Functions define ======================================== */
/*!
* @brief Initialize I2C module
*
* @param[in] I2Cx: i2c module
* @param[in] config: I2C configuration pointer
* @return none
*/
void I2C_Init(I2C_Type *I2Cx, const I2C_ConfigType *config)
{
uint8_t instance = I2C_INDEX(I2Cx);
DEVICE_ASSERT(I2C_INSTANCE_MAX > instance);
DEVICE_ASSERT(NULL != config);
/* i2c module system enable */
CKGEN_Enable(g_i2cInfoPool[instance].CKGEN_I2Cx, ENABLE);
CKGEN_SoftReset(g_i2cInfoPool[instance].SRST_I2Cx, ENABLE);
/* master scl sample, halfbaud setting */
I2C_SetSampleStep(I2Cx, config->masterConfig.sampleCnt, config->masterConfig.stepCnt);
/* master scl sync, arbitration */
I2C_SetSYNC(I2Cx, config->masterConfig.SYNCEn);
I2C_SetARB(I2Cx, config->masterConfig.ARBEn);
/* slave 7bit, 7bit range address */
I2C_SetRAD(I2Cx, config->slaveConfig.rangeAddrEn);
I2C_SetSlaveAddr(I2Cx, config->slaveConfig.slaveAddr);
I2C_SetSlaveRangeAddr(I2Cx, config->slaveConfig.slaveRangeAddr);
/* master/slave 10bit address */
I2C_SetADEXT(I2Cx, config->extAddrEn);
/* slave stretch */
I2C_SetStretch(I2Cx, config->slaveConfig.stretchEn);
/* slave monitor */
I2C_SetMNT(I2Cx, config->slaveConfig.monitorEn);
/* slave general call */
I2C_SetGCA(I2Cx, config->slaveConfig.generalCallEn);
/* slave wakeup */
I2C_SetWakeup(I2Cx, config->slaveConfig.wakeupEn);
/* tx underflow, rx overflow int */
I2C_SetTxUFInterrupt(I2Cx, config->slaveConfig.txUFInterruptEn);
I2C_SetRxOFInterrupt(I2Cx, config->slaveConfig.rxOFInterruptEn);
/* i2c deglitch cnt */
I2C_SetDGLCnt(I2Cx, config->slaveConfig.glitchFilterCnt);
/* i2c start stop int */
I2C_SetSSInterrupt(I2Cx, config->ssInterruptEn);
/* i2c tx by DMA */
I2C_SetDMATx(I2Cx, config->dmaTxEn);
/* i2c rx by DMA */
I2C_SetDMARx(I2Cx, config->dmaRxEn);
/* i2c nack int */
I2C_SetNackInterrupt(I2Cx, config->nackInterruptEn);
/* i2c master/slave */
I2C_SetMSTR(I2Cx, config->mode);
/* i2c module enable */
I2C_SetModuleEnable(I2Cx, config->i2cEn);
/* i2c callback function */
s_i2cCallback[instance] = config->callBack;
/* i2c int */
I2C_SetInterrupt(I2Cx, config->interruptEn);
/* i2c NVIC */
if (DISABLE == config->interruptEn)
{
NVIC_DisableIRQ(g_i2cInfoPool[instance].I2Cx_IRQn);
NVIC_ClearPendingIRQ(g_i2cInfoPool[instance].I2Cx_IRQn);
}
else
{
NVIC_EnableIRQ(g_i2cInfoPool[instance].I2Cx_IRQn);
}
}
/*!
* @brief RTC De-initialize
*
* @param[in] I2Cx: i2c module
* @param[in] config: I2C configuration pointer
* @return none
*/
void I2C_DeInit(I2C_Type *I2Cx)
{
uint8_t instance = I2C_INDEX(I2Cx);
DEVICE_ASSERT(I2C_INSTANCE_MAX > instance);
s_i2cCallback[instance] = (DeviceCallback_Type)NULL;
NVIC_DisableIRQ(g_i2cInfoPool[instance].I2Cx_IRQn);
NVIC_ClearPendingIRQ(g_i2cInfoPool[instance].I2Cx_IRQn);
CKGEN_SoftReset(g_i2cInfoPool[instance].SRST_I2Cx, DISABLE);
CKGEN_Enable(g_i2cInfoPool[instance].CKGEN_I2Cx, DISABLE);
}
/*!
* @brief set I2C Callback function
*
* @param[in] I2Cx: i2c module
* @param[in] callback: call back function
* @return none
*/
void I2C_SetCallback(I2C_Type *I2Cx, DeviceCallback_Type callback)
{
uint8_t instance = I2C_INDEX(I2Cx);
DEVICE_ASSERT(I2C_INSTANCE_MAX > instance);
s_i2cCallback[instance] = callback;
}
/*!
* @brief I2C0 interrupt request handler
*
* @param[in] none
* @return none
*/
void I2C0_IRQHandler(void)
{
uint32_t wpara = 0, lpara = 0;
wpara = I2C_GetStatus0(I2C0);
lpara = I2C_GetStatus1(I2C0);
#ifdef I2C_USE_INTERRUPT_TRANSMIT
I2C_MasterSlaveIntHandler(I2C0, wpara, lpara);
#endif /* I2C_USE_INTERRUPT_TRANSMIT */
if (NULL != s_i2cCallback[0])
{
s_i2cCallback[0](I2C0, wpara, lpara);
}
}
/*!
* @brief I2C1 interrupt request handler
*
* @param[in] none
* @return none
*/
void I2C1_IRQHandler(void)
{
uint32_t wpara = 0, lpara = 0;
wpara = I2C_GetStatus0(I2C1);
lpara = I2C_GetStatus1(I2C1);
#ifdef I2C_USE_INTERRUPT_TRANSMIT
I2C_MasterSlaveIntHandler(I2C1, wpara, lpara);
#endif /* I2C_USE_INTERRUPT_TRANSMIT */
if (NULL != s_i2cCallback[1])
{
s_i2cCallback[1](I2C1, wpara, lpara);
}
}
/*!
* @brief I2C send start
*
* @param[in] I2Cx: I2C module
* @return i2c hardware status
*/
uint32_t I2C_Start(I2C_Type *I2Cx)
{
uint32_t timeout = 0;
uint32_t status = I2C_HW_STATUS_ERROR_NULL;
DEVICE_ASSERT(I2C_INSTANCE_MAX > I2C_INDEX(I2Cx));
I2C_TxEn(I2Cx);
没有合适的资源?快使用搜索试试~ 我知道了~
AC7801 MakeFile测试工程
共128个文件
h:67个
c:25个
o:8个
需积分: 1 0 下载量 192 浏览量
2023-04-30
00:26:07
上传
评论
收藏 678KB ZIP 举报
温馨提示
make编译后,生成两个LED交替闪烁的可执行文件
资源推荐
资源详情
资源评论
收起资源包目录
AC7801 MakeFile测试工程 (128个子文件)
GPIO.acs 903B
GPIO.bin 3KB
ac780x_i2c.c 42KB
ac780x_spi.c 39KB
ac780x_gpio.c 31KB
ac780x_pwm.c 24KB
ac780x_eflash.c 23KB
ac780x_can.c 20KB
ac780x_uart.c 19KB
ac780x_spm.c 18KB
system_ac780x.c 15KB
ac780x_adc.c 12KB
ac780x_dma.c 11KB
ac780x_ckgen.c 11KB
ac780x_pwdt.c 9KB
ac780x_timer.c 8KB
ac780x_acmp.c 7KB
main.c 6KB
ac780x_debugout.c 6KB
ac780x_wdg.c 6KB
ac780x_mmdivsqrt.c 6KB
ac780x_crc.c 5KB
ac780x_rtc.c 5KB
ac780x_ecc_sram.c 4KB
ac780x_ctu.c 4KB
ac780x_irq_cb.c 4KB
ac780x_msp.c 4KB
ac780x_gpio.d 1KB
main.d 1KB
ac780x_irq_cb.d 952B
ac780x_ckgen.d 925B
ac780x_spm.d 921B
system_ac780x.d 911B
ac780x_msp.d 902B
startup_ac780x.d 41B
GPIO.elf 171KB
ac780x.h 361KB
arm_math.h 248KB
core_cm33.h 167KB
core_armv8mml.h 167KB
core_cm7.h 144KB
core_cm4.h 120KB
core_cm3.h 109KB
core_sc300.h 107KB
core_cm23.h 95KB
core_armv8mbl.h 95KB
cmsis_gcc.h 61KB
cmsis_armclang.h 56KB
core_cm0plus.h 46KB
core_sc000.h 46KB
ac780x_pwm_reg.h 44KB
core_cm0.h 38KB
cmsis_armcc.h 28KB
cmsis_iccarm.h 27KB
ac780x_pwm.h 23KB
ac780x_adc_reg.h 22KB
ac780x_i2c_reg.h 21KB
ac780x_uart_reg.h 20KB
ac780x_i2c.h 17KB
ac780x_spi_reg.h 17KB
ac780x_ckgen.h 17KB
ac780x_gpio.h 17KB
ac780x_dma_reg.h 16KB
ac780x_can_reg.h 16KB
ac780x_spi.h 15KB
ac780x_dma.h 15KB
ac780x_adc.h 15KB
ac780x_uart.h 13KB
ac780x_can.h 13KB
ac780x_acmp_reg.h 12KB
ac780x_pwdt_reg.h 12KB
ac780x_spm.h 11KB
ac780x_mmdivsqrt_reg.h 11KB
mpu_armv8.h 11KB
ac780x_eflash.h 11KB
ac780x_ctu_reg.h 10KB
cmsis_compiler.h 9KB
ac780x_pwdt.h 8KB
ac780x_eflash_reg.h 8KB
ac780x_acmp.h 8KB
system_ac780x.h 8KB
ac780x_wdg_reg.h 8KB
mpu_armv7.h 7KB
ac780x_rtc_reg.h 7KB
ac780x_timer_reg.h 7KB
ac780x_gpio_reg.h 7KB
ac780x_crc_reg.h 6KB
ac780x_ctu.h 6KB
arm_common_tables.h 6KB
ac780x_crc.h 6KB
ac780x_ecc_sram_reg.h 5KB
ac780x_timer.h 5KB
ac780x_mmdivsqrt.h 5KB
ac780x_wdg.h 4KB
ac780x_rtc.h 4KB
ac780x_ecc_sram.h 4KB
device_assert.h 3KB
ac780x_irq_cb.h 3KB
ac780x_debugout.h 3KB
arm_const_structs.h 3KB
共 128 条
- 1
- 2
资源评论
芯图
- 粉丝: 7
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于yolov8+dlib实现视觉识别的安全驾驶监测系统部署到jetson NX平台源码+模型.zip
- Qt框架+OpenCV+动态爱心+编程教学+520
- 基于opencv+yolov8实现目标追踪及驻留时长统计源码.zip
- 水稻病害基于Yolov8算法优化目标检测识别与AI辅助决策python源码+模型+使用说明.zip
- 海尔618算价表_七海5.20_16.00xlsx(1)(2).xlsx
- WebCrawler.scr
- 【计算机专业毕业设计】大学生就业信息管理系统设计源码.zip
- YOLO 数据集:8种路面缺陷病害检测【包含划分好的数据集、类别class文件、数据可视化脚本】
- JAVA实现Modbus RTU或Modbus TCPIP案例.zip
- 基于YOLOv8的FPS TPS AI自动锁定源码+使用步骤说明.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功