From 4085ae3ddfbbf10c8ccbd3dccd43452c40a1fe40 Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 13 Mar 2015 12:24:52 +0200 Subject: Add bootloader, nfclib and sensorlib --- boot_loader/bl_can_timing.h | 241 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 boot_loader/bl_can_timing.h (limited to 'boot_loader/bl_can_timing.h') diff --git a/boot_loader/bl_can_timing.h b/boot_loader/bl_can_timing.h new file mode 100644 index 0000000..f0aaa0c --- /dev/null +++ b/boot_loader/bl_can_timing.h @@ -0,0 +1,241 @@ +//***************************************************************************** +// +// bl_can_timing.h - Timing definitions for the CAN controller. +// +// Copyright (c) 2008-2014 Texas Instruments Incorporated. All rights reserved. +// Software License Agreement +// +// Texas Instruments (TI) is supplying this software for use solely and +// exclusively on TI's microcontroller products. The software is owned by +// TI and/or its suppliers, and is protected under applicable copyright +// laws. You may not combine this software with "viral" open-source +// software in order to form a larger program. +// +// THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS. +// NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT +// NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY +// CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL +// DAMAGES, FOR ANY REASON WHATSOEVER. +// +// This is part of revision 2.1.0.12573 of the Tiva Firmware Development Package. +// +//***************************************************************************** + +#ifndef __BL_CAN_TIMING_H__ +#define __BL_CAN_TIMING_H__ + +#ifdef CAN_ENABLE_UPDATE + +//***************************************************************************** +// +// This macro is used to generate the proper value for CAN_BIT_TIMING. The +// values selected for each crystal/bit rate combination assumes a propagation +// delay of 300ns (which will always be rounded up to the next integer multiple +// of the CAN time quanta). +// +//***************************************************************************** +#define CAN_BIT_REG(seg1, seg2, sjw, brp) \ + ((((seg2 - 1) << CAN_BIT_TSEG2_S) & \ + CAN_BIT_TSEG2_M) | \ + (((seg1 - 1) << CAN_BIT_TSEG1_S) & \ + CAN_BIT_TSEG1_M) | \ + (((sjw - 1) << CAN_BIT_SJW_S) & \ + CAN_BIT_SJW_M) | \ + (((brp - 1) << CAN_BIT_BRP_S) & \ + CAN_BIT_BRP_M)) + +//***************************************************************************** +// +// The settings for a 16MHz crystal frequency. +// +//***************************************************************************** +#if CRYSTAL_FREQ == 16000000 +#if CAN_BIT_RATE == 1000000 +#define CAN_BIT_TIMING CAN_BIT_REG(10, 5, 4, 1) // tProp = 312ns +#elif CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(9, 6, 4, 2) // tProp = 375ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(4, 3, 3, 8) // tProp = 500ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 8) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 20) // tProp = 1250ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 50) // tProp = 3125ns +#else +#error Invalid CAN_BIT_RATE value used with a 16MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 12MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 12000000 +#if CAN_BIT_RATE == 1000000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 3, 3, 1) // tProp = 416ns +#elif CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(7, 4, 4, 2) // tProp = 500ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 5, 4, 4) // tProp = 333ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 6) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 15) // tProp = 1250ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 5, 4, 50) // tProp = 4166ns +#else +#error Invalid CAN_BIT_RATE value used with a 12MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 10MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 10000000 +#if CAN_BIT_RATE == 1000000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 3, 3, 1) // tProp = 300ns +#elif CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(11, 8, 4, 1) // tProp = 300ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 4) // tProp = 400ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 5) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 20) // tProp = 2000ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 50) // tProp = 5000ns +#else +#error Invalid CAN_BIT_RATE value used with a 10MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 8MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 8000000 +#if CAN_BIT_RATE == 1000000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 2, 2, 1) // tProp = 375ns +#elif CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(9, 6, 4, 1) // tProp = 375ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(4, 3, 3, 4) // tProp = 500ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 4) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 10) // tProp = 1250ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 25) // tProp = 3125ns +#else +#error Invalid CAN_BIT_RATE value used with a 8MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 6MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 6000000 +#if CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(7, 4, 4, 1) // tProp = 500ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 5, 4, 2) // tProp = 333ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 3) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 5, 4, 10) // tProp = 1666ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 5, 4, 25) // tProp = 4166ns +#else +#error Invalid CAN_BIT_RATE value used with a 6MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 5MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 5000000 +#if CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(6, 3, 3, 1) // tProp = 600ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 2) // tProp = 400ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 4) // tProp = 800ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 10) // tProp = 2000ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 25) // tProp = 5000ns +#else +#error Invalid CAN_BIT_RATE value used with a 5MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 4MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 4000000 +#if CAN_BIT_RATE == 500000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 2, 2, 1) // tProp = 750ns +#elif CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(4, 3, 3, 2) // tProp = 500ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 2) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 5) // tProp = 1250ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 20) // tProp = 5000ns +#else +#error Invalid CAN_BIT_RATE value used with a 4MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 2MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 2000000 +#if CAN_BIT_RATE == 250000 +#define CAN_BIT_TIMING CAN_BIT_REG(4, 3, 3, 1) // tProp = 500ns +#elif CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(8, 7, 4, 1) // tProp = 500ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 4) // tProp = 2000ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 10) // tProp = 5000ns +#else +#error Invalid CAN_BIT_RATE value used with a 2MHz crystal. +#endif + +//***************************************************************************** +// +// The settings for a 1MHz crystal frequency. +// +//***************************************************************************** +#elif CRYSTAL_FREQ == 1000000 +#if CAN_BIT_RATE == 125000 +#define CAN_BIT_TIMING CAN_BIT_REG(4, 3, 3, 1) // tProp = 1000ns +#elif CAN_BIT_RATE == 50000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 2) // tProp = 2000ns +#elif CAN_BIT_RATE == 20000 +#define CAN_BIT_TIMING CAN_BIT_REG(5, 4, 4, 5) // tProp = 5000ns +#else +#error Invalid CAN_BIT_RATE value used with a 1MHz crystal. +#endif + +//***************************************************************************** +// +// An unsupported crystal frequency was specified. +// +//***************************************************************************** +#else +#error The CRYSTAL_FREQ value is not supported by the CAN controller. +#endif + +#endif + +#endif // __BL_CAN_TIMING_H__ -- cgit v1.3.1