📄 analog_8c-source.html
字号:
<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< 0x1C; i++)<a name="l00499"></a>00499 {<a name="l00500"></a>00500 SPMCSR = (1<<SIGRD) | (1<<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 & 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> << 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> &= ~<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> &= ~<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> << 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> << 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> << 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> << 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><<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> &= ~<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> &= ~<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 & (1<<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<<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 & (1<<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<<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 & (1<<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<<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 & (1<<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<<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 & (1<<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<<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 + -