F2837xD_sdfm_drivers.c 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. //###########################################################################
  2. //
  3. // FILE: F2837xD_sdfm_drivers.c
  4. //
  5. // TITLE: SDFM Driver functions
  6. //
  7. //###########################################################################
  8. // $TI Release: F2837xD Support Library v3.05.00.00 $
  9. // $Release Date: Tue Jun 26 03:15:23 CDT 2018 $
  10. // $Copyright:
  11. // Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/
  12. //
  13. // Redistribution and use in source and binary forms, with or without
  14. // modification, are permitted provided that the following conditions
  15. // are met:
  16. //
  17. // Redistributions of source code must retain the above copyright
  18. // notice, this list of conditions and the following disclaimer.
  19. //
  20. // Redistributions in binary form must reproduce the above copyright
  21. // notice, this list of conditions and the following disclaimer in the
  22. // documentation and/or other materials provided with the
  23. // distribution.
  24. //
  25. // Neither the name of Texas Instruments Incorporated nor the names of
  26. // its contributors may be used to endorse or promote products derived
  27. // from this software without specific prior written permission.
  28. //
  29. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  30. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  31. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  32. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  33. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  34. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  35. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  36. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  37. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  38. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  39. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  40. // $
  41. //###########################################################################
  42. //
  43. // Included Files
  44. //
  45. #include "F28x_Project.h"
  46. #include "F2837xD_struct.h"
  47. #include "F2837xD_sdfm_drivers.h"
  48. //
  49. // Sdfm_configureInputCtrl - This function configures SDFM Input control unit.
  50. // sdfmNumber - This parameter should be used to
  51. // select SDFM1 (or) SDFM2
  52. // filterNumber - This parameter is used to select
  53. // which filter (FILTER1,FILTER2,
  54. // FILTER3,FILTER4) needs to be
  55. // configured.
  56. // mode - This parameter is used to select
  57. // one of the modes mentioned above
  58. //
  59. // Input control unit can be configured in four different modes:
  60. // MODE_0 : Modulator clock rate = Modulator data rate
  61. // MODE_1 : Modulator clock rate = (Modulator data rate / 2)
  62. // MODE_2 : Manchester encoded data (Modulator clock is encoded into data)
  63. // MODE_3 : Modulator clock rate = (2 x Modulator data rate)
  64. //
  65. void Sdfm_configureInputCtrl(Uint16 sdfmNumber, Uint16 filterNumber,
  66. Uint16 mode)
  67. {
  68. EALLOW;
  69. switch (filterNumber)
  70. {
  71. case FILTER1:
  72. (*SDFM[sdfmNumber]).SDCTLPARM1.bit.MOD = mode;
  73. break;
  74. case FILTER2:
  75. (*SDFM[sdfmNumber]).SDCTLPARM2.bit.MOD = mode;
  76. break;
  77. case FILTER3:
  78. (*SDFM[sdfmNumber]).SDCTLPARM3.bit.MOD = mode;
  79. break;
  80. case FILTER4:
  81. (*SDFM[sdfmNumber]).SDCTLPARM4.bit.MOD = mode;
  82. break;
  83. }
  84. EDIS;
  85. }
  86. //
  87. // Sdfm_configureComparator - This function configures SDFM Comparator unit.
  88. // Comparator unit can be configured to monitor
  89. // input conditions with a fast settling time.
  90. // This module can be programmed to detect over and
  91. // under value conditions.
  92. //
  93. // sdfmNumber - This parameter should be used to
  94. // select SDFM1 (or) SDFM2
  95. // filterNumber - This parameter is used to select
  96. // which filter (FILTER1,FILTER2,
  97. // FILTER3,FILTER3)
  98. // filterType - This parameter is used to select
  99. // one of the filter type mentioned
  100. // above (SINC1,SINC2,SINC3,SINCFAST)
  101. // OSR - This parameter is used to
  102. // configure oversampling ratio for
  103. // comparator
  104. // HLT - This parameter is used to
  105. // configure to detect over value
  106. // condition
  107. // LLT - This parameter is used to
  108. // configure to detect under value
  109. // condition
  110. //
  111. void Sdfm_configureComparator(Uint16 sdfmNumber, Uint16 filterNumber,
  112. Uint16 filterType, Uint16 OSR, Uint16 HLT,
  113. Uint16 LLT)
  114. {
  115. EALLOW;
  116. switch (filterNumber)
  117. {
  118. case FILTER1: //Filter 1
  119. //
  120. //Configure filter type : Sincfast / Sinc1 / Sinc2 / Sinc3
  121. //
  122. (*SDFM[sdfmNumber]).SDCPARM1.bit.CS1_CS0 = filterType;
  123. //
  124. //Configure OSR value
  125. //
  126. if(OSR<=COMPARATOR_MAX_OSR)
  127. {
  128. (*SDFM[sdfmNumber]).SDCPARM1.bit.COSR = OSR;
  129. }
  130. else
  131. {
  132. (*SDFM[sdfmNumber]).SDCPARM1.bit.COSR = COMPARATOR_MAX_OSR;
  133. }
  134. (*SDFM[sdfmNumber]).SDCMPH1.bit.HLT = HLT;
  135. (*SDFM[sdfmNumber]).SDCMPL1.bit.LLT = LLT;
  136. break;
  137. case FILTER2: //Filter 2
  138. //
  139. //Configure filter type : Sincfast / Sinc1 / Sinc2 / Sinc3
  140. //
  141. (*SDFM[sdfmNumber]).SDCPARM2.bit.CS1_CS0 = filterType;
  142. //
  143. //Configure OSR value
  144. //
  145. if(OSR<=COMPARATOR_MAX_OSR)
  146. {
  147. (*SDFM[sdfmNumber]).SDCPARM2.bit.COSR = OSR;
  148. }
  149. else
  150. {
  151. (*SDFM[sdfmNumber]).SDCPARM2.bit.COSR = COMPARATOR_MAX_OSR;
  152. }
  153. (*SDFM[sdfmNumber]).SDCMPH2.bit.HLT = HLT;
  154. (*SDFM[sdfmNumber]).SDCMPL2.bit.LLT = LLT;
  155. break;
  156. case FILTER3: //Filter 3
  157. //
  158. //Configure filter type : Sincfast / Sinc1 / Sinc2 / Sinc3
  159. //
  160. (*SDFM[sdfmNumber]).SDCPARM3.bit.CS1_CS0 = filterType;
  161. //
  162. //Configure OSR value
  163. //
  164. if(OSR<=COMPARATOR_MAX_OSR)
  165. {
  166. (*SDFM[sdfmNumber]).SDCPARM3.bit.COSR = OSR;
  167. }
  168. else
  169. {
  170. (*SDFM[sdfmNumber]).SDCPARM3.bit.COSR = COMPARATOR_MAX_OSR;
  171. }
  172. (*SDFM[sdfmNumber]).SDCMPH3.bit.HLT = HLT;
  173. (*SDFM[sdfmNumber]).SDCMPL3.bit.LLT = LLT;
  174. break;
  175. case FILTER4: //Filter 4
  176. //
  177. //Configure filter type : Sincfast / Sinc1 / Sinc2 / Sinc3
  178. //
  179. (*SDFM[sdfmNumber]).SDCPARM4.bit.CS1_CS0 = filterType;
  180. //
  181. //Configure Comparator OSR value
  182. //
  183. if(OSR<=COMPARATOR_MAX_OSR)
  184. {
  185. (*SDFM[sdfmNumber]).SDCPARM4.bit.COSR = OSR;
  186. }
  187. else
  188. {
  189. (*SDFM[sdfmNumber]).SDCPARM4.bit.COSR = COMPARATOR_MAX_OSR;
  190. }
  191. (*SDFM[sdfmNumber]).SDCMPH4.bit.HLT = HLT;
  192. (*SDFM[sdfmNumber]).SDCMPL4.bit.LLT = LLT;
  193. break;
  194. }
  195. EDIS;
  196. }
  197. //
  198. // SDFM_configureData_filter - This function configures SDFM Data filter unit
  199. //
  200. // SDFM Data filter unit can be configured in any
  201. // of four different Sinc filter types:
  202. // sdfmNumber - This parameter should be used to
  203. // select SDFM1 (or) SDFM2
  204. // filterNumber - This parameter is used to select
  205. // which filter(FILTER1,FILTER2,
  206. // FILTER3,FILTER3) needs to be
  207. // configured
  208. // Filter_switch - This parameter is used to
  209. // enable/disable a filter
  210. // filterType - This parameter is used to select
  211. // one of the filter type mentioned
  212. // above (SINC1 / SINC2 / SINC3 /
  213. // SINCFAST)
  214. // OSR - This parameter is used to
  215. // configure oversampling ratio
  216. // for Data filter (Upto OSR_256)
  217. // DR_switch - This parameter selects whether
  218. // data is represented in 16 (or)
  219. // 32 bits
  220. // shift_bits - When user chooses 16 bit
  221. // representation, this variable
  222. // allows to right shift by
  223. // specific number of bits
  224. //
  225. void Sdfm_configureData_filter(Uint16 sdfmNumber, Uint16 filterNumber,
  226. Uint16 Filter_switch, Uint16 filterType,
  227. Uint16 OSR, Uint16 DR_switch, Uint16 shift_bits)
  228. {
  229. EALLOW;
  230. switch(filterNumber)
  231. {
  232. case FILTER1: //Filter 1
  233. (*SDFM[sdfmNumber]).SDDFPARM1.bit.FEN = Filter_switch;
  234. (*SDFM[sdfmNumber]).SDDFPARM1.bit.SST = filterType;
  235. //
  236. //Configure Sinc filter OSR value
  237. //
  238. if(OSR<=DATA_FILTER_MAX_OSR)
  239. {
  240. (*SDFM[sdfmNumber]).SDDFPARM1.bit.DOSR = OSR;
  241. }
  242. else
  243. {
  244. (*SDFM[sdfmNumber]).SDDFPARM1.bit.DOSR = DATA_FILTER_MAX_OSR;
  245. }
  246. //
  247. //Configure Data filter data representation
  248. //DR_switch - Data Representation (0/1 = 16/32b 2's complement)
  249. //
  250. (*SDFM[sdfmNumber]).SDDPARM1.bit.DR = DR_switch;
  251. if(DR_switch == 0)
  252. {
  253. (*SDFM[sdfmNumber]).SDDPARM1.bit.SH = shift_bits;
  254. }
  255. break;
  256. case FILTER2: //Filter 2
  257. (*SDFM[sdfmNumber]).SDDFPARM2.bit.FEN = Filter_switch;
  258. (*SDFM[sdfmNumber]).SDDFPARM2.bit.SST = filterType;
  259. //
  260. //Configure Sinc filter OSR value
  261. //
  262. if(OSR<=DATA_FILTER_MAX_OSR)
  263. {
  264. (*SDFM[sdfmNumber]).SDDFPARM2.bit.DOSR = OSR;
  265. }
  266. else
  267. {
  268. (*SDFM[sdfmNumber]).SDDFPARM2.bit.DOSR = DATA_FILTER_MAX_OSR;
  269. }
  270. //
  271. //Configure Data filter data representation
  272. // DR_switch - Data Representation (0/1 = 16/32b 2's complement)
  273. //
  274. (*SDFM[sdfmNumber]).SDDPARM2.bit.DR = DR_switch;
  275. if(DR_switch == 0)
  276. {
  277. (*SDFM[sdfmNumber]).SDDPARM2.bit.SH = shift_bits;
  278. }
  279. break;
  280. case FILTER3: //Filter 3
  281. (*SDFM[sdfmNumber]).SDDFPARM3.bit.FEN = Filter_switch;
  282. (*SDFM[sdfmNumber]).SDDFPARM3.bit.SST = filterType;
  283. //
  284. //Configure Sinc filter OSR value
  285. //
  286. if(OSR<=DATA_FILTER_MAX_OSR)
  287. {
  288. (*SDFM[sdfmNumber]).SDDFPARM3.bit.DOSR = OSR;
  289. }
  290. else
  291. {
  292. (*SDFM[sdfmNumber]).SDDFPARM3.bit.DOSR = DATA_FILTER_MAX_OSR;
  293. }
  294. //
  295. //Configure Data filter data representation
  296. // DR_switch - Data Representation (0/1 = 16/32b 2's complement)
  297. //
  298. (*SDFM[sdfmNumber]).SDDPARM3.bit.DR = DR_switch;
  299. if(DR_switch == 0)
  300. {
  301. (*SDFM[sdfmNumber]).SDDPARM3.bit.SH = shift_bits;
  302. }
  303. break;
  304. case FILTER4: //Filter 4
  305. (*SDFM[sdfmNumber]).SDDFPARM4.bit.FEN = Filter_switch;
  306. (*SDFM[sdfmNumber]).SDDFPARM4.bit.SST = filterType;
  307. //
  308. //Configure Sinc filter OSR value
  309. //
  310. if(OSR<=DATA_FILTER_MAX_OSR)
  311. {
  312. (*SDFM[sdfmNumber]).SDDFPARM4.bit.DOSR = OSR;
  313. }
  314. else
  315. {
  316. (*SDFM[sdfmNumber]).SDDFPARM4.bit.DOSR = DATA_FILTER_MAX_OSR;
  317. }
  318. //
  319. //Configure Data filter data representation
  320. // DR_switch - Data Representation (0/1 = 16/32b 2's complement)
  321. //
  322. (*SDFM[sdfmNumber]).SDDPARM4.bit.DR = DR_switch;
  323. if(DR_switch == 0)
  324. {
  325. (*SDFM[sdfmNumber]).SDDPARM4.bit.SH = shift_bits;
  326. }
  327. break;
  328. }
  329. EDIS;
  330. }
  331. //
  332. // Sdfm_configureInterrupt - This function configures SDFM Interrupt unit.
  333. // SDFM Interrupt unit can be configured to
  334. // enable/disable different sources of SDFM
  335. // interrupts which should trigger CPU interrupt.
  336. //
  337. // sdfmNumber - This parameter should be used to
  338. // select SDFM1 (or) SDFM2
  339. // filterNumber - This parameter is used to select
  340. // which filter(FILTER1,FILTER2,
  341. // FILTER3,FILTER3) needs to be
  342. // configured
  343. // IEH_Switch - This parameter allows over value
  344. // condition to trigger CPU interrupt
  345. // IEL_Switch - This parameter allows under value
  346. // condition to trigger CPU interrupt
  347. // MFIE_Switch - This parameter allows modulator
  348. // failure to trigger CPU interrupt
  349. // AE_Switch - This parameter allows new filter
  350. // data acknowledge interrupt signal
  351. // to trigger CPU interrupt
  352. //
  353. void Sdfm_configureInterrupt(Uint16 sdfmNumber, Uint16 filterNumber,
  354. Uint16 IEH_Switch, Uint16 IEL_Switch,
  355. Uint16 MFIE_Switch, Uint16 AE_Switch)
  356. {
  357. EALLOW;
  358. switch(filterNumber)
  359. {
  360. case FILTER1: //Filter 1
  361. (*SDFM[sdfmNumber]).SDCPARM1.bit.IEH = IEH_Switch;
  362. (*SDFM[sdfmNumber]).SDCPARM1.bit.IEL = IEL_Switch;
  363. (*SDFM[sdfmNumber]).SDCPARM1.bit.MFIE = MFIE_Switch;
  364. (*SDFM[sdfmNumber]).SDDFPARM1.bit.AE = AE_Switch;
  365. break;
  366. case FILTER2: //Filter 2
  367. (*SDFM[sdfmNumber]).SDCPARM2.bit.IEH = IEH_Switch;
  368. (*SDFM[sdfmNumber]).SDCPARM2.bit.IEL = IEL_Switch;
  369. (*SDFM[sdfmNumber]).SDCPARM2.bit.MFIE = MFIE_Switch;
  370. (*SDFM[sdfmNumber]).SDDFPARM2.bit.AE = AE_Switch;
  371. break;
  372. case FILTER3: //Filter 3
  373. (*SDFM[sdfmNumber]).SDCPARM3.bit.IEH = IEH_Switch;
  374. (*SDFM[sdfmNumber]).SDCPARM3.bit.IEL = IEL_Switch;
  375. (*SDFM[sdfmNumber]).SDCPARM3.bit.MFIE = MFIE_Switch;
  376. (*SDFM[sdfmNumber]).SDDFPARM3.bit.AE = AE_Switch;
  377. break;
  378. case FILTER4: //Filter 4
  379. (*SDFM[sdfmNumber]).SDCPARM4.bit.IEH = IEH_Switch;
  380. (*SDFM[sdfmNumber]).SDCPARM4.bit.IEL = IEL_Switch;
  381. (*SDFM[sdfmNumber]).SDCPARM4.bit.MFIE = MFIE_Switch;
  382. (*SDFM[sdfmNumber]).SDDFPARM4.bit.AE = AE_Switch;
  383. break;
  384. }
  385. EDIS;
  386. }
  387. //
  388. // SDFM_configExternalreset - This function configures SDFM module to
  389. // enable/disable external filter reset from PWM
  390. //
  391. // sdfmNumber - This parameter should
  392. // be used to select
  393. // SDFM1 (or) SDFM2
  394. // filter1_Config_ext_reset - This parameter is used
  395. // to enable/disable
  396. // external PWM reset for
  397. // filter1
  398. // filter2_Config_ext_reset - This parameter is used
  399. // to enable/disable
  400. // external PWM reset for
  401. // filter2
  402. // filter3_Config_ext_reset - This parameter is used
  403. // to enable / disable
  404. // external PWM reset for
  405. // filter3
  406. // filter4_Config_ext_reset - This parameter is used
  407. // to enable / disable
  408. // external PWM reset for
  409. // filter4
  410. //
  411. void Sdfm_configureExternalreset(Uint16 sdfmNumber,
  412. Uint16 filter1_Config_ext_reset,
  413. Uint16 filter2_Config_ext_reset,
  414. Uint16 filter3_Config_ext_reset,
  415. Uint16 filter4_Config_ext_reset)
  416. {
  417. EALLOW;
  418. (*SDFM[sdfmNumber]).SDDFPARM1.bit.SDSYNCEN = filter1_Config_ext_reset;
  419. (*SDFM[sdfmNumber]).SDDFPARM2.bit.SDSYNCEN = filter2_Config_ext_reset;
  420. (*SDFM[sdfmNumber]).SDDFPARM3.bit.SDSYNCEN = filter3_Config_ext_reset;
  421. (*SDFM[sdfmNumber]).SDDFPARM4.bit.SDSYNCEN = filter4_Config_ext_reset;
  422. EDIS;
  423. }
  424. //
  425. // SDFM_enableMFE - This function enables Master filter bit of SDFM module
  426. //
  427. // sdfmNumber - This parameter should be used to select
  428. // SDFM1 (or) SDFM2
  429. //
  430. void Sdfm_enableMFE(Uint16 sdfmNumber)
  431. {
  432. EALLOW;
  433. (*SDFM[sdfmNumber]).SDMFILEN.bit.MFE = 1; //Master Filter bit is enabled
  434. EDIS;
  435. }
  436. //
  437. // SDFM_disableMFE - This function disable Master filter bit of SDFM module
  438. //
  439. // sdfmNumber - This parameter should be used to select
  440. // SDFM1 (or) SDFM2
  441. //
  442. void SDFM_disableMFE(Uint16 sdfmNumber)
  443. {
  444. EALLOW;
  445. (*SDFM[sdfmNumber]).SDMFILEN.bit.MFE = 0; //Master Filter bit is disabled
  446. EDIS;
  447. }
  448. //
  449. // SDFM_enableMIE - This function enable Master Interrupt bit of SDFM module
  450. //
  451. // sdfmNumber - This parameter should be used to select
  452. // SDFM1 (or) SDFM2
  453. //
  454. void Sdfm_enableMIE(Uint16 sdfmNumber)
  455. {
  456. EALLOW;
  457. //
  458. //Enable MIE (Master Interrupt Enable) bit
  459. //
  460. (*SDFM[sdfmNumber]).SDCTL.bit.MIE = 1;
  461. EDIS;
  462. }
  463. //
  464. // Sdfm_disableMIE - This function disable Master Interrupt bit of SDFM module
  465. //
  466. // sdfmNumber - This parameter should be used to select
  467. // SDFM1 (or) SDFM2
  468. //
  469. void Sdfm_disableMIE(Uint16 sdfmNumber)
  470. {
  471. EALLOW;
  472. //
  473. //Disable MIE (Master Interrupt Enable) bit
  474. //
  475. (*SDFM[sdfmNumber]).SDCTL.bit.MIE = 0;
  476. EDIS;
  477. }
  478. //
  479. // Sdfm_readFlagRegister - This function helps user read SDFM flag
  480. // register (SDIFLG)
  481. //
  482. Uint32 Sdfm_readFlagRegister(Uint16 sdfmNumber)
  483. {
  484. return ((*SDFM[sdfmNumber]).SDIFLG.all);
  485. }
  486. //
  487. // Sdfm_clearFlagRegister - This function helps is used to clear
  488. // SDIFLG register
  489. //
  490. void Sdfm_clearFlagRegister(Uint16 sdfmNumber,Uint32 sdfmReadFlagRegister)
  491. {
  492. (*SDFM[sdfmNumber]).SDIFLGCLR.all = sdfmReadFlagRegister;
  493. }
  494. //
  495. // End of file
  496. //