⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analog_8c-source.html

📁 用AVR453开发的电池保护板的C语言程序,希望对大家有用!
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<a name="l00487"></a>00487 <a name="l00488"></a><a class="code" href="analog_8c.html#3c1f303d7eb11cfac6b816c903a2d74c">00488</a> <span class="keywordtype">void</span> <a class="code" href="analog_8c.html#3c1f303d7eb11cfac6b816c903a2d74c">ReadFactoryCalibration</a>(<span class="keywordtype">void</span>)<a name="l00489"></a>00489 {<a name="l00490"></a>00490   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> __flash * ptr = 0;<a name="l00491"></a>00491   <span class="keywordtype">char</span> i;<a name="l00492"></a>00492   <span class="keywordtype">char</span> flags = SREG;<a name="l00493"></a>00493   <span class="keywordtype">char</span> temp;<a name="l00494"></a>00494   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> sig_array[0x1C];   <span class="comment">//Array with signature/fab.calibration bytes</span><a name="l00495"></a>00495 <a name="l00496"></a>00496 <a name="l00497"></a>00497   __disable_interrupt();<a name="l00498"></a>00498   <span class="keywordflow">for</span>(i=0; i&lt; 0x1C; i++)<a name="l00499"></a>00499   {<a name="l00500"></a>00500     SPMCSR = (1&lt;&lt;SIGRD) | (1&lt;&lt;SPMEN);<a name="l00501"></a>00501     temp = *ptr++;<a name="l00502"></a>00502     sig_array[i] = temp;<a name="l00503"></a>00503   }<a name="l00504"></a>00504 <a name="l00505"></a>00505   <span class="keywordflow">if</span>(flags &amp; 0x80)<a name="l00506"></a>00506     __enable_interrupt();<a name="l00507"></a>00507 <a name="l00508"></a>00508   <span class="comment">//Now apply the Cal values we just read out.</span><a name="l00509"></a>00509 <a name="l00510"></a>00510 <span class="comment">//  SlowRCCal = SLOW_RC_CAL;</span><a name="l00511"></a>00511   <a class="code" href="analog_8h.html#687385ff2dc327d92849b41d1eb8013e">SlowRCCal</a> = (<a class="code" href="analog_8c.html#6465f46ae12e83ee0ad16ca881463630">SLOW_RC_HI_CAL</a> &lt;&lt; 8)|(<a class="code" href="analog_8c.html#a3510402ed0bea945bced29c323b2629">SLOW_RC_LO_CAL</a>);<a name="l00512"></a>00512   <a class="code" href="analog_8h.html#66bc7ff908874d4556c4ba6615d04d93">FastRCCal</a> = <a class="code" href="analog_8c.html#65cbb0f3e8aa58b8abe45b1d9dd086a9">FAST_RC_CAL</a>;<a name="l00513"></a>00513 <a name="l00514"></a>00514   <span class="comment">//Calibrate bandgap (fab. or battery factory)</span><a name="l00515"></a>00515   <a class="code" href="analog_8h.html#36b5cf8f9ce77acff7e5f33a98de771b">BGCCRCal</a> = <a class="code" href="analog_8c.html#3a272b9342915be2134fedbf9f936f05">BG_C_CAL</a>| 0x80;<a name="l00516"></a>00516   <span class="keywordflow">if</span> (<a class="code" href="analog_8c.html#3605aec4243bb45d86cb2e2af78467b7">ReadVrefCalibration</a>()) {<a name="l00517"></a>00517         <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> &amp;= ~<a class="code" href="calibration_8h.html#9d03755ea3b631c7b0aad83653dad3b3">CAL_VREF_MASK</a>;<a name="l00518"></a>00518         <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> |=  <a class="code" href="calibration_8h.html#d84a891955753a3214ca0330363a53eb">CAL_VREF_OK</a>;<a name="l00519"></a>00519   } <span class="keywordflow">else</span> {<a name="l00520"></a>00520     <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> &amp;= ~<a class="code" href="calibration_8h.html#9d03755ea3b631c7b0aad83653dad3b3">CAL_VREF_MASK</a>;<a name="l00521"></a>00521   }<a name="l00522"></a>00522 <a name="l00523"></a>00523   <span class="comment">//Save the Cell1-Cell4 gain values</span><a name="l00524"></a>00524   <a class="code" href="analog_8c.html#92c13181f40eb6acea2626b50d3f94fe">ADCgain</a>[0] = (<a class="code" href="analog_8c.html#6764c73d87c12e9099120b4c78921bfa">CELL1_HI_CAL</a> &lt;&lt; 8)|(<a class="code" href="analog_8c.html#35d3af43d03665ff4f8e10b7dec063e0">CELL1_LO_CAL</a>);<a name="l00525"></a>00525   <a class="code" href="analog_8c.html#92c13181f40eb6acea2626b50d3f94fe">ADCgain</a>[1] = (<a class="code" href="analog_8c.html#ddf8efea77239b900f9e77aa8bf5b971">CELL2_HI_CAL</a> &lt;&lt; 8)|(<a class="code" href="analog_8c.html#ba2c0c1972ea8403b31535edc971ad1b">CELL2_LO_CAL</a>);<a name="l00526"></a>00526   <a class="code" href="analog_8c.html#92c13181f40eb6acea2626b50d3f94fe">ADCgain</a>[2] = (<a class="code" href="analog_8c.html#6434808ec881415cf38902801e60d268">CELL3_HI_CAL</a> &lt;&lt; 8)|(<a class="code" href="analog_8c.html#3445e8939cb1e02814aeedd3ac3356a1">CELL3_LO_CAL</a>);<a name="l00527"></a>00527   <a class="code" href="analog_8c.html#92c13181f40eb6acea2626b50d3f94fe">ADCgain</a>[3] = (<a class="code" href="analog_8c.html#3fc7ced524333801057555f303d9ac82">CELL4_HI_CAL</a> &lt;&lt; 8)|(<a class="code" href="analog_8c.html#14923711cac81045c8e3ffe2dd8671ba">CELL4_LO_CAL</a>);<a name="l00528"></a>00528 <a name="l00529"></a>00529   <span class="comment">//On-chip temperature sensor calibration value</span><a name="l00530"></a>00530   <a class="code" href="analog_8c.html#3dd9f0a8cb62e461777529d933b8bb86">VTgain</a> = (<a class="code" href="analog_8c.html#edbf97c9632981af1b47a0df57319b7a">VPTAT_HI_CAL</a>&lt;&lt;8) | <a class="code" href="analog_8c.html#5df5677b296b630ab7b6fa8bffa71440">VPTAT_LO_CAL</a>;    <span class="comment">//on-chip temp sensor</span><a name="l00531"></a>00531 <a name="l00532"></a>00532   <span class="comment">// Calibration values for CCoffset and CCIoffset?</span><a name="l00533"></a>00533   <span class="keywordflow">if</span> (<a class="code" href="analog_8c.html#5d4c3da99c898e7fd5b4cbf0784d78a4">ReadCCOffsetCalibration</a>()) {<a name="l00534"></a>00534         <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> &amp;= ~<a class="code" href="calibration_8h.html#b14153d45e0d7a958de835881b98ed9c">CAL_CC_MASK</a>;<a name="l00535"></a>00535         <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> |=  <a class="code" href="calibration_8h.html#ef6b80d12f72d67a1e01082474d3920f">CAL_CC_OK</a>;<a name="l00536"></a>00536   } <span class="keywordflow">else</span> {<a name="l00537"></a>00537     <a class="code" href="calibration_8h.html#9660525f7f243f8739ea84b450849ad4">calibration_state</a> &amp;= ~<a class="code" href="calibration_8h.html#b14153d45e0d7a958de835881b98ed9c">CAL_CC_MASK</a>;<a name="l00538"></a>00538   }<a name="l00539"></a>00539 }<a name="l00540"></a>00540 <a name="l00541"></a>00541 <a name="l00542"></a>00542 <a name="l00543"></a><a class="code" href="analog_8h.html#3605aec4243bb45d86cb2e2af78467b7">00543</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="analog_8c.html#3605aec4243bb45d86cb2e2af78467b7">ReadVrefCalibration</a>(<span class="keywordtype">void</span>)<a name="l00544"></a>00544 {<a name="l00545"></a>00545   <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> temp;<a name="l00546"></a>00546 <a name="l00547"></a>00547   <span class="keywordflow">while</span>(EECR &amp; (1&lt;&lt;EEPE));<a name="l00548"></a>00548   EEAR = <a class="code" href="ee_8h.html#c1810014498b4197cc65e33ef33a5b12">EESTORAGE_BGCCR</a>;<a name="l00549"></a>00549   EECR = (1&lt;&lt;EERE);     <span class="comment">//read</span><a name="l00550"></a>00550   temp = EEDR;<a name="l00551"></a>00551   <span class="keywordflow">if</span> (temp != 0xFF) {<a name="l00552"></a>00552     BGCCR = temp;<a name="l00553"></a>00553     <span class="keywordflow">while</span>(EECR &amp; (1&lt;&lt;EEPE));<a name="l00554"></a>00554     EEAR = <a class="code" href="ee_8h.html#ea637ed7627b5444856d86124ee3b734">EESTORAGE_BGCRR</a>;<a name="l00555"></a>00555     EECR = (1&lt;&lt;EERE);   <span class="comment">//read</span><a name="l00556"></a>00556     BGCRR = EEDR;<a name="l00557"></a>00557     <span class="keywordflow">return</span>(1);<a name="l00558"></a>00558   } <span class="keywordflow">else</span> {<a name="l00559"></a>00559     BGCRR = 0x0F;<a name="l00560"></a>00560     BGCCR = <a class="code" href="analog_8h.html#36b5cf8f9ce77acff7e5f33a98de771b">BGCCRCal</a>;           <span class="comment">// signature value (with Band gap enabled)</span><a name="l00561"></a>00561     <span class="keywordflow">return</span>(0);<a name="l00562"></a>00562   }<a name="l00563"></a>00563 }<a name="l00564"></a>00564 <a name="l00565"></a>00565 <a name="l00566"></a><a class="code" href="analog_8h.html#5d4c3da99c898e7fd5b4cbf0784d78a4">00566</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="analog_8c.html#5d4c3da99c898e7fd5b4cbf0784d78a4">ReadCCOffsetCalibration</a>(<span class="keywordtype">void</span>)<a name="l00567"></a>00567 {<a name="l00568"></a>00568   <span class="keywordtype">signed</span> <span class="keywordtype">char</span> temp;<a name="l00569"></a>00569 <a name="l00570"></a>00570   <span class="keywordflow">while</span>(EECR &amp; (1&lt;&lt;EEPE));<a name="l00571"></a>00571   EEAR = <a class="code" href="ee_8h.html#619dff328beac255324b6562e2b80c65">EESTORAGE_CC_valid</a>;<a name="l00572"></a>00572   EECR = (1&lt;&lt;EERE);     <span class="comment">//read</span><a name="l00573"></a>00573   temp = EEDR;<a name="l00574"></a>00574   <span class="keywordflow">if</span> (temp != -1) {<a name="l00575"></a>00575     <span class="keywordflow">do</span> {} <span class="keywordflow">while</span>(EECR &amp; (1&lt;&lt;EEPE));<a name="l00576"></a>00576     EEAR = <a class="code" href="ee_8h.html#e765cf649f04c8df9b05b86a09e3053e">EESTORAGE_CCoffset</a>;<a name="l00577"></a>00577     EECR = (1&lt;&lt;EERE);   <span class="comment">//read</span><a name="l00578"></a>00578     temp = EEDR;<a name="l00579"></a>00579     CCoffset = (<span class="keywordtype">signed</span> int)temp;<a name="l00580"></a>00580     <span class="keywordflow">do</span> {} <span class="keywordflow">while</span>(EECR &amp; (1&lt;&lt;EEPE));<a name="l00581"></a>00581     EEAR = <a class="code" href="ee_8h.html#1058eb18046286d7acafccddbbabccd0">EESTORAGE_CCIoffset</a>;<a name="l00582"></a>00582     EECR = (1&lt;&lt;EERE);   <span class="comment">//read</span><a name="l00583"></a>00583     temp=EEDR;<a name="l00584"></a>00584     CCIoffset = (<span class="keywordtype">signed</span> long)temp;<a name="l00585"></a>00585     <span class="keywordflow">return</span>(1);<a name="l00586"></a>00586   } <span class="keywordflow">else</span> {<a name="l00587"></a>00587     CCIoffset = 0;<a name="l00588"></a>00588     CCoffset  = 0;<a name="l00589"></a>00589     <span class="keywordflow">return</span>(0);<a name="l00590"></a>00590   }<a name="l00591"></a>00591 }<a name="l00592"></a>00592 <a name="l00593"></a>00593 <span class="comment">/* =====================================================================================</span><a name="l00594"></a>00594 <span class="comment">   =====================================================================================</span><a name="l00595"></a>00595 <span class="comment">   ===================================================================================== */</span><a name="l00596"></a>00596 <a name="l00597"></a>00597 <a name="l00598"></a>00598 <span class="comment">/* Calibration routines for VREF and CC/CCIoffset</span><a name="l00599"></a>00599 <span class="comment">*/</span><a name="l00600"></a>00600 <a name="l00601"></a>00601 <a name="l00602"></a>00602 <a name="l00603"></a><a class="code" href="calibration_8h.html#045319a690d4ea28438fc1bf5bac3355">00603</a> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> <a class="code" href="analog_8c.html#045319a690d4ea28438fc1bf5bac3355">CalibrateVREF</a>(<span class="keywordtype">void</span>)         <span class="comment">// calibration of VREF</span><a name="l00604"></a>00604 {<a name="l00605"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -