pic24_timer.c
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00038 #include "pic24_all.h"
00039
00040
00041
00042
00043
00044
00053 uint16 msToU16Ticks(uint16 u16_ms, uint16 u16_pre) {
00054
00055 float f_ticks = FCY;
00056 uint16 u16_ticks;
00057 f_ticks = (f_ticks*u16_ms)/u16_pre/1000L;
00058 ASSERT(f_ticks < 65535.5);
00059 u16_ticks = roundFloatToUint16(f_ticks);
00060 return u16_ticks;
00061 }
00062
00071 uint16 usToU16Ticks(uint16 u16_us, uint16 u16_pre) {
00072
00073 float f_ticks = FCY;
00074 uint16 u16_ticks;
00075 f_ticks = (f_ticks*u16_us)/u16_pre/1000000L;
00076 ASSERT(f_ticks < 65535.5);
00077 u16_ticks = roundFloatToUint16(f_ticks);
00078 return u16_ticks;
00079
00080 }
00081
00090 uint32 usToU32Ticks(uint32 u32_us, uint16 u16_pre) {
00091
00092 float f_ticks = FCY;
00093 uint32 u32_ticks;
00094 f_ticks = (f_ticks*u32_us)/u16_pre/1000000L;
00095 u32_ticks = roundFloatToUint32(f_ticks);
00096 return u32_ticks;
00097 }
00098
00099
00100
00108 uint16 getTimerPrescaleBits(uint8 u8_TCKPS) {
00109 uint16 au16_prescaleValue[] = { 1, 8, 64, 256 };
00110 ASSERT(u8_TCKPS <= 3);
00111 return au16_prescaleValue[u8_TCKPS];
00112 }
00113
00119 uint32 ticksToMs (uint32 u32_ticks, uint16 u16_tmrPre) {
00120
00121 float f_ticks;
00122 uint32 u32_timeMs;
00123
00124 f_ticks = u32_ticks;
00125 f_ticks = ((f_ticks * u16_tmrPre)/FCY) * 1000;
00126 u32_timeMs = roundFloatToUint32(f_ticks);
00127 return (u32_timeMs);
00128 }
00129
00130
00136 uint32 ticksToUs (uint32 u32_ticks, uint16 u16_tmrPre) {
00137
00138 float f_ticks;
00139 uint32 u32_timeUs;
00140
00141 f_ticks = u32_ticks;
00142 f_ticks = ((f_ticks * u16_tmrPre)/FCY) * 1000000L;
00143 u32_timeUs = roundFloatToUint32(f_ticks);
00144 return (u32_timeUs);
00145 }
00146
00152 uint32 ticksToNs (uint32 u32_ticks, uint16 u16_tmrPre) {
00153
00154 float f_ticks;
00155 uint32 u32_timeNs;
00156
00157 f_ticks = u32_ticks;
00158 f_ticks = ((f_ticks * u16_tmrPre)/FCY) * 1000000000L;
00159 u32_timeNs = roundFloatToUint32(f_ticks);
00160 return (u32_timeNs);
00161 }
00162
00171 uint32 computeDeltaTicksLong(uint16 u16_start, uint16 u16_end, uint16 u16_tmrPR, uint16 u16_oflows) {
00172 uint32 u32_deltaTicks;
00173 if (u16_oflows == 0) u32_deltaTicks = u16_end - u16_start;
00174 else {
00175
00176 u32_deltaTicks = (u16_tmrPR + 1) - u16_start;
00177
00178 u32_deltaTicks += ((((uint32) u16_oflows)- 1) * (((uint32)u16_tmrPR) + 1)) ;
00179
00180 u32_deltaTicks += u16_end;
00181 }
00182 return (u32_deltaTicks);
00183 }
00184
00192 uint16 computeDeltaTicks(uint16 u16_start, uint16 u16_end, uint16 u16_tmrPR) {
00193 uint16 u16_deltaTicks;
00194 if (u16_end >= u16_start) u16_deltaTicks = u16_end - u16_start;
00195 else {
00196
00197 u16_deltaTicks = (u16_tmrPR + 1) - u16_start;
00198
00199 u16_deltaTicks += u16_end;
00200 }
00201 return (u16_deltaTicks);
00202 }