Browse Source

update

master
zhaohe 1 year ago
parent
commit
bd3293a71c
  1. 2
      .clang-format
  2. 5
      .vscode/settings.json
  3. 186
      app/app.uvoptx
  4. 20
      app/app.uvprojx
  5. 1
      app/config/sdk_config.h
  6. 2
      app/src/aproject_config/config.h
  7. 133
      app/src/board/ads1291/ads1291.c
  8. 28
      app/src/board/ads1291/ads1291.h
  9. 330
      app/src/board/ads1291/ads1291_type.h
  10. 151
      app/src/board/ads129x/ads129x.c
  11. 26
      app/src/board/ads129x/ads129x.h
  12. 286
      app/src/board/ads129x/ads129x_type.h
  13. 70
      app/src/board/app_board.c
  14. 38
      app/src/board/app_board.h
  15. 4
      app/src/board/board_ecg_sensor.c
  16. 6
      app/src/main.c
  17. 8
      app/src/one_conduction_main.c
  18. 1
      app/src/service/heart_wave_sample_service/heart_wave_sample_service.c
  19. 2
      libznordic
  20. 2
      scripter/build_app.bat
  21. 2
      sdk

2
.clang-format

@ -2,7 +2,7 @@
# http://clang.llvm.org/docs/ClangFormatStyleOptions.html
Language: Cpp
BasedOnStyle: Google
ColumnLimit: 300
ColumnLimit: 160
AlignConsecutiveMacros: true
AlignConsecutiveDeclarations: true
AlignConsecutiveAssignments: true

5
.vscode/settings.json

@ -200,7 +200,10 @@
"ble_cmd_process_service.h": "c",
"storage_service.h": "c",
"board_ssd1306_interface.h": "c",
"zsdk_ble_slave_config.h": "c"
"zsdk_ble_slave_config.h": "c",
"ads129x.h": "c",
"ads129x_if_impl.h": "c",
"ads129x_type.h": "c"
},
"files.encoding": "gbk"
}

186
app/app.uvoptx

@ -667,6 +667,30 @@
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>26</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\board\ads129x\ads129x.c</PathWithFileName>
<FilenameWithoutPath>ads129x.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>27</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\src\board\app_board.c</PathWithFileName>
<FilenameWithoutPath>app_board.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
@ -677,7 +701,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>26</FileNumber>
<FileNumber>28</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -697,7 +721,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>27</FileNumber>
<FileNumber>29</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -709,7 +733,7 @@
</File>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>28</FileNumber>
<FileNumber>30</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -729,7 +753,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>4</GroupNumber>
<FileNumber>29</FileNumber>
<FileNumber>31</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -749,7 +773,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>30</FileNumber>
<FileNumber>32</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -761,7 +785,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>31</FileNumber>
<FileNumber>33</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -773,7 +797,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>32</FileNumber>
<FileNumber>34</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -785,7 +809,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>33</FileNumber>
<FileNumber>35</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -797,7 +821,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>34</FileNumber>
<FileNumber>36</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -809,7 +833,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>35</FileNumber>
<FileNumber>37</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -821,7 +845,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>36</FileNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -833,7 +857,7 @@
</File>
<File>
<GroupNumber>5</GroupNumber>
<FileNumber>37</FileNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -853,7 +877,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>6</GroupNumber>
<FileNumber>38</FileNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -873,7 +897,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -885,7 +909,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -897,7 +921,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -909,7 +933,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -921,7 +945,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>43</FileNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -933,7 +957,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>44</FileNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -945,7 +969,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>45</FileNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -957,7 +981,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>46</FileNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -969,7 +993,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>47</FileNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -981,7 +1005,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>48</FileNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -993,7 +1017,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>49</FileNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1005,7 +1029,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>50</FileNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1017,7 +1041,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>51</FileNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1029,7 +1053,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>52</FileNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1041,7 +1065,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>53</FileNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1053,7 +1077,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>54</FileNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1065,7 +1089,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>55</FileNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1077,7 +1101,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>56</FileNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1089,7 +1113,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>57</FileNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1101,7 +1125,7 @@
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>58</FileNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1121,7 +1145,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>59</FileNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1133,7 +1157,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>60</FileNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1145,7 +1169,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>61</FileNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1157,7 +1181,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>62</FileNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1169,7 +1193,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>63</FileNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1181,7 +1205,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>64</FileNumber>
<FileNumber>66</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1193,7 +1217,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>65</FileNumber>
<FileNumber>67</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1205,7 +1229,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>66</FileNumber>
<FileNumber>68</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1217,7 +1241,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>67</FileNumber>
<FileNumber>69</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1229,7 +1253,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>68</FileNumber>
<FileNumber>70</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1241,7 +1265,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>69</FileNumber>
<FileNumber>71</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1253,7 +1277,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>70</FileNumber>
<FileNumber>72</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1265,7 +1289,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>71</FileNumber>
<FileNumber>73</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1277,7 +1301,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>72</FileNumber>
<FileNumber>74</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1289,7 +1313,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>73</FileNumber>
<FileNumber>75</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1301,7 +1325,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>74</FileNumber>
<FileNumber>76</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1313,7 +1337,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>75</FileNumber>
<FileNumber>77</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1325,7 +1349,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>76</FileNumber>
<FileNumber>78</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1337,7 +1361,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>77</FileNumber>
<FileNumber>79</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1349,7 +1373,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>78</FileNumber>
<FileNumber>80</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1361,7 +1385,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>79</FileNumber>
<FileNumber>81</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1373,7 +1397,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>80</FileNumber>
<FileNumber>82</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1385,7 +1409,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>81</FileNumber>
<FileNumber>83</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1397,7 +1421,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>82</FileNumber>
<FileNumber>84</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1409,7 +1433,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>83</FileNumber>
<FileNumber>85</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1421,7 +1445,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>84</FileNumber>
<FileNumber>86</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1433,7 +1457,7 @@
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>85</FileNumber>
<FileNumber>87</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1453,7 +1477,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>86</FileNumber>
<FileNumber>88</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1465,7 +1489,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>87</FileNumber>
<FileNumber>89</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1477,7 +1501,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>88</FileNumber>
<FileNumber>90</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1489,7 +1513,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>89</FileNumber>
<FileNumber>91</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1501,7 +1525,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>90</FileNumber>
<FileNumber>92</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1513,7 +1537,7 @@
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>91</FileNumber>
<FileNumber>93</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1533,7 +1557,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>92</FileNumber>
<FileNumber>94</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1545,7 +1569,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>93</FileNumber>
<FileNumber>95</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1557,7 +1581,7 @@
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>94</FileNumber>
<FileNumber>96</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1577,7 +1601,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>95</FileNumber>
<FileNumber>97</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1589,7 +1613,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>96</FileNumber>
<FileNumber>98</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1601,7 +1625,7 @@
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>97</FileNumber>
<FileNumber>99</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1621,7 +1645,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>98</FileNumber>
<FileNumber>100</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1633,7 +1657,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>99</FileNumber>
<FileNumber>101</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1645,7 +1669,7 @@
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>100</FileNumber>
<FileNumber>102</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1665,7 +1689,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>101</FileNumber>
<FileNumber>103</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1677,7 +1701,7 @@
</File>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>102</FileNumber>
<FileNumber>104</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1697,7 +1721,7 @@
<RteFlg>0</RteFlg>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>103</FileNumber>
<FileNumber>105</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1709,7 +1733,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>104</FileNumber>
<FileNumber>106</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1721,7 +1745,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>105</FileNumber>
<FileNumber>107</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1733,7 +1757,7 @@
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>106</FileNumber>
<FileNumber>108</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>

20
app/app.uvprojx

@ -508,6 +508,16 @@
<FileType>1</FileType>
<FilePath>.\src\basic_service\app_event_distribute.c</FilePath>
</File>
<File>
<FileName>ads129x.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\ads129x\ads129x.c</FilePath>
</File>
<File>
<FileName>app_board.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\app_board.c</FilePath>
</File>
</Files>
</Group>
<Group>
@ -4397,6 +4407,16 @@
<FileType>1</FileType>
<FilePath>.\src\basic_service\app_event_distribute.c</FilePath>
</File>
<File>
<FileName>ads129x.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\ads129x\ads129x.c</FilePath>
</File>
<File>
<FileName>app_board.c</FileName>
<FileType>1</FileType>
<FilePath>.\src\board\app_board.c</FilePath>
</File>
</Files>
</Group>
<Group>

1
app/config/sdk_config.h

@ -3,5 +3,6 @@
#define NRF_LOG_ENABLED 1
#define NRF_LOG_BACKEND_UART_ENABLED 1
#define NRF_LOG_BACKEND_UART_TX_PIN 41
#define DEBUG
#include "libznordic/zsdk_config/zsdk_ble_slave_config.h"

2
app/src/aproject_config/config.h

@ -33,6 +33,8 @@
#define BATTERY_ADC_CHANNEL 1 // 不重复即可
#define BATTERY_CHARGE_DETECT_PIN 6
/**
* @brief
*/

133
app/src/board/ads1291/ads1291.c

@ -1,133 +0,0 @@
#include "ads1291.h"
#include "ads1291_type.h"
/** @addtogroup ADS1292R
* @{
*/
/* Private typedef -----------------------------------------------------------*/
typedef struct {
uint8_t id; /* id,ads1292r固定为0x73 ads1291 0x52 */
uint8_t cfg1; /* 设置寄存器 */
uint8_t cfg2; /* 设置寄存器 */
uint8_t loff; /* 导联 */
uint8_t ch1set; /* 通道一设置 */
uint8_t ch2set; /* 通道二设置 */
uint8_t rld_sens; /* 右腿驱动 */
uint8_t loff_sens; /* 导联 */
uint8_t loff_stat; /* 导联 */
uint8_t resp1; /* 呼吸 */
uint8_t resp2; /* 呼吸 */
uint8_t gpio; /* gpio1,2的控制 */
} ads1292r_regs_s;
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* 局部全局变量,包含ads1292寄存器默认值 */
static ads1292r_regs_s ads1292r_reg = {
/* 默认参数 */
0x73, /* 默认地址0x73 */
0x02, /* 连续转换,500sps采样率 */
0x80, /* 导联脱落比较器关,内部参考电压关,2.42v参考电压,晶振输出关,测试信号关,测试信号频率为0HZ */
0x10, /* 脱落比较器正端阈值为95%,负端为5%,引出模式电流大小6na,频率为0HZ */
0x00, /* 通道一关闭,6倍增益,正常电极输入 */
0x00, /* 通道二关闭,6倍增益,正常电极输入 */
0x00, /* 未启用 */
0x00, /* 未启用 */
0x00, /* fmod为clk四分频,其他未用 */
0x02, /* 呼吸相关配置 */
0x03, /* 呼吸相关配置 */
0x0c /* gpio1、2皆为输入模式 */
};
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
/* 不必要,尽量不要对外开放以下函数,最好设置成static类型 */
/* ads1292r发送指令 */
uint8_t ads1292r_send_cmd(uint8_t cmd) {
uint8_t rx = 0;
ADS1292_CS_RESET(); /* 选中设备 */
port_delay_us(100);
rx = port_spi_transmit_receive(cmd);
port_delay_us(100);
ADS1292_CS_SET(); /* 释放设备 */
return rx;
}
/* ads1292r读写寄存器,自动根据指令类型区分读和写操作 */
uint8_t ads1292r_rw_reg(uint8_t cmd, uint8_t data) {
uint8_t rx = 0;
ADS1292_CS_RESET(); /* 选中设备 */
port_delay_us(1);
port_spi_transmit_receive(cmd); /* 发送读写指令 */
port_spi_transmit_receive(0X00); /* 只写一个数据 */
if ((cmd & ADS1292R_COMMAND_RREG) == ADS1292R_COMMAND_RREG) /* 判断指令类型 */
rx = port_spi_transmit_receive(0X00); /* 返回寄存器值 */
else
rx = port_spi_transmit_receive(data); /* 写入数值 */
port_delay_us(1);
ADS1292_CS_SET(); /* 释放设备 */
return rx;
}
/* 从指定寄存器开始读写一定数量的寄存器 */
void ads1292r_write_multiregs(uint8_t reg, uint8_t *ch, uint8_t size) {
uint8_t i;
ADS1292_CS_RESET(); /* 选中设备 */
port_delay_us(100);
port_spi_transmit_receive(ADS1292R_COMMAND_WREG | reg);
port_delay_us(100);
port_spi_transmit_receive(size - 1);
for (i = 0; i < size; i++) {
port_delay_us(100);
port_spi_transmit_receive(*ch);
ch++;
}
port_delay_us(100);
ADS1292_CS_SET();
}
/* 从指定寄存器开始读写一定数量的寄存器 */
void ads1292r_read_multiregs(uint8_t reg, uint8_t *ch, uint8_t size) {
uint8_t i;
ADS1292_CS_RESET(); /* 选中设备 */
port_delay_us(100);
port_spi_transmit_receive(ADS1292R_COMMAND_RREG | reg);
port_delay_us(100);
port_spi_transmit_receive(size - 1);
for (i = 0; i < size; i++) {
port_delay_us(100);
*ch = port_spi_transmit_receive(0);
ch++;
}
port_delay_us(100);
ADS1292_CS_SET();
}
uint8_t ads1292r_init(uint8_t timeout);
void ads1292r_normal_adc_start(void);
void ads1292r_test_adc_start(void);
void ads1292r_get_value(uint8_t *ad_buf);

28
app/src/board/ads1291/ads1291.h

@ -1,28 +0,0 @@
#ifndef __ADS1292R_H
#define __ADS1292R_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
uint8_t ads1292r_init(uint8_t timeout);
/** @brief 开启双通道正常模式采样,用于心电采集
* @details 500sps6ad数据
* @retval NONE
*/
void ads1292r_normal_adc_start(void);
/** @brief 开启双测试信号adc转换。
* @details 500sps61HZ方波ad数据
* @retval NONE
*/
void ads1292r_test_adc_start(void);
void ads1292r_get_value(uint8_t *ad_buf);
#ifdef __cplusplus
}
#endif
#endif /* __ADS1292R_H */

330
app/src/board/ads1291/ads1291_type.h

@ -1,330 +0,0 @@
/**
******************************************************************************
* @file : ads1291_typ.h
* @brief : ads1291相关数据类型定义
* @details :
* @author :
* @date : 2020/9/2
* @version : V0.1
* @copyright : Copyright (C)
******************************************************************************
* @attention
* NONE
******************************************************************************
* @verbatim
* :
* 1. 2020/9/2
* Charmander
*
* @endverbatim
******************************************************************************
*/
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __ADS1292_TYP_H
#define __ADS1292_TYP_H
#ifdef __cplusplus
extern "C" {
#endif
/** @defgroup ADS1291_TYP ADS1291 TYP
* @{
*/
/* Exported types ------------------------------------------------------------*/
/** @addtogroup ADS1291_TYP_Exported_types ADS1291 TYP Exported types
* @{
*/
/** @brief 寄存器地址枚举
* @details 11
*/
typedef enum {
ADS1291_REG_ID = 0x00,
ADS1291_REG_CONFIG1 = 0x01,
ADS1291_REG_CONFIG2 = 0x02,
ADS1291_REG_LOFF = 0x03,
ADS1291_REG_CH1SET = 0x04,
ADS1291_REG_CH2SET = 0x05,
ADS1291_REG_RLDSENS = 0x06,
ADS1291_REG_LOFFSENS = 0x07,
ADS1291_REG_LOFFSTAT = 0x08,
ADS1291_REG_RESP1 = 0x09,
ADS1291_REG_RESP2 = 0x0A,
ADS1291_REG_GPIO = 0x0B
} ADS1291_REG_E;
/**
* @}
*/
/** @addtogroup ADS1291_TYP_Exported_constants ADS1291 TYP Exported constants
* @brief +
* +
* @{
*/
/* Exported constants --------------------------------------------------------*/
#define ADS1291_REG_SIZE_MAX 12 /* ADS1291寄存器数量 */
/** @addtogroup ADS1291_TYP_REG_CONTENT ADS1291 TYP Exported content
* @brief
* @{
*/
/* 芯片ID */
#define ADS1291_ID 0x73
/* 属于ADS1291_REG_CONFIG1的寄存器设置 */
#define ADS1291_SINGLE_SHOT_OFF 0 /* 连续转换模式,默认 */
#define ADS1291_SINGLE_SHOT_ON 1 /* 单次转换模式 */
/* 采样率,该模块采用fclk为512k,0分频模式,其他配置下采样率会改变 */
#define ADS1291_OVERSAMPLING_125SPS 0
#define ADS1291_OVERSAMPLING_250SPS 1
#define ADS1291_OVERSAMPLING_500SPS 2 /* 默认 */
#define ADS1291_OVERSAMPLING_1000SPS 3
#define ADS1291_OVERSAMPLING_2000SPS 4
#define ADS1291_OVERSAMPLING_4000SPS 5
#define ADS1291_OVERSAMPLING_8000SPS 6
#define ADS1291_OVERSAMPLING_NONESPS 7
/* 属于ADS1291_REG_CONFIG2的寄存器设置 */
#define ADS1291_PDB_LOFF_COMP_OFF 0 /* 导联脱落比较器关,默认 */
#define ADS1291_PDB_LOFF_COMP_ON 1 /* 导联脱落比较器开 */
#define ADS1291_PDB_REFBUF_OFF 0 /* 内部参考电压关,默认 */
#define ADS1291_PDB_REFBUF_ON 1 /* 内部参考电压开 */
#define ADS1291_VREF_2420MV 0 /* 选择参考电压为2.42v,默认 */
#define ADS1291_VREF_4033MV 1 /* 选择参考电压为4.033v */
#define ADS1291_CLK_OUTPUT_OFF 0 /* 时钟输出关,默认 */
#define ADS1291_CLK_OUTPUT_ON 1 /* 时钟输出开 */
#define ADS1291_INT_TEST_OFF 0 /* 内部测试电压关,默认 */
#define ADS1291_INT_TEST_ON 1 /* 内部测试电压开 */
#define ADS1291_INT_FREQ_DC 0 /* 直流,默认 */
#define ADS1291_INT_FREQ_AC 1 /* 1HZ方波 */
/* 属于ADS1291_REG_LOFF的寄存器设置 */
/* 属于ADS1291_REG_CH1SET,与ADS1291_REG_CH2SET的寄存器设置 */
#define ADS1291_CHx_OFF 1 /* 禁止使用通道一 */
#define ADS1291_CHx_ON 0 /* 使用通道一,默认 */
#define ADS1291_GAIN_6 0 /* 使用通道一6倍增益,默认 */
#define ADS1291_GAIN_1 1 /* 使用通道一1倍增益 */
#define ADS1291_GAIN_2 2 /* 使用通道一2倍增益 */
#define ADS1291_GAIN_3 3 /* 使用通道一3倍增益 */
#define ADS1291_GAIN_4 4 /* 使用通道一4倍增益 */
#define ADS1291_GAIN_8 5 /* 使用通道一8倍增益 */
#define ADS1291_GAIN_12 6 /* 使用通道一12倍增益 */
/* 选择通道一的输入 */
#define ADS1291_CHx_INPUT_NORMAL 0 /* 正常电极输入,默认 */
#define ADS1291_CHx_INPUT_SHORTED 1 /* 短路,测偏执用 */
#define ADS1291_CHx_INPUT_RLD 2 /* 右腿驱动 */
/* For channel 1, (MVDDP – MVDDN) is [0.5(AVDD + AVSS)]; for channel 2, (MVDDP – MVDDN) is DVDD / 4. */
/* For channel 2,VDD / 2 for supply measurement */
#define ADS1291_CHx_INPUT_MVDD 3
#define ADS1291_CHx_INPUT_TEMP 4 /* 板载温度 */
#define ADS1291_CHx_INPUT_TEST 5 /* 内部测试信号 */
#define ADS1291_CHx_INPUT_RLDDRP 6
#define ADS1291_CHx_INPUT_RLDDRM 7
#define ADS1291_CHx_INPUT_RLDDRPM 8
#define ADS1291_CHx_INPUT_ROUTE 9 /* 连接到通道三 */
#define ADS1291_CHx_INPUT_RESERVED 10 /* 预留 */
/* 属于ADS1291_REG_RLDSENS的寄存器设置 */
#define ADS1291_CHOP_FREQ_DIV4 3 /* PGA斩波频率未fMOD/4 */
#define ADS1291_PDB_RLD_OFF 0 /* 右腿驱动电源关,默认 */
#define ADS1291_PDB_RLD_ON 1 /* 右腿驱动电源开 */
#define ADS1291_PDB_RLD_SENSE_OFF 0 /* 右腿驱动导联脱落检测关,默认 */
#define ADS1291_PDB_RLD_SENSE_ON 1 /* 右腿驱动导联脱落检测开 */
#define ADS1291_RLD2N_OFF 0 /* 通道二负极为右腿输入关,默认 */
#define ADS1291_RLD2N_ON 1 /* 通道二负极为右腿输入开 */
#define ADS1291_RLD2P_OFF 0 /* 通道二正极为右腿输入关,默认 */
#define ADS1291_RLD2P_ON 1 /* 通道二正极为右腿输入开 */
#define ADS1291_RLD1N_OFF 0 /* 通道一负极为右腿输入关,默认 */
#define ADS1291_RLD1N_ON 1 /* 通道一负极为右腿输入开 */
#define ADS1291_RLD1P_OFF 0 /* 通道一正极为右腿输入关,默认 */
#define ADS1291_RLD1P_ON 1 /* 通道一正极为右腿输入开 */
/* 属于ADS1291_REG_LOFFSENS的寄存器设置 */
#define ADS1291_FLIP2_OFF 0 /* 导联脱落检测通道二电流方向关,默认 */
#define ADS1291_FLIP2_ON 1 /* 导联脱落检测通道二电流方向开 */
#define ADS1291_FLIP1_OFF 0 /* 导联脱落检测通道一电流方向关,默认 */
#define ADS1291_FLIP1_ON 1 /* 导联脱落检测通道一电流方向开 */
#define ADS1291_LOFF2N_OFF 0 /* 通道二负极导联脱落检测关,默认 */
#define ADS1291_LOFF2N_ON 1 /* 通道二负极导联脱落检测开 */
#define ADS1291_LOFF2P_OFF 0 /* 通道二正极导联脱落检测关,默认 */
#define ADS1291_LOFF2P_ON 1 /* 通道二正极导联脱落检测开 */
#define ADS1291_LOFF1N_OFF 0 /* 通道一负极导联脱落检测关,默认 */
#define ADS1291_LOFF1N_ON 1 /* 通道一负极导联脱落检测开 */
#define ADS1291_LOFF1P_OFF 0 /* 通道一正极导联脱落检测关,默认 */
#define ADS1291_LOFF1P_ON 1 /* 通道一正极导联脱落检测开 */
/* 属于ADS1291_REG_LOFFSTAT的寄存器设置 */
#define ADS1291_CLK_DIV4 0 /* 0 = fMOD = fCLK / 4 (default, use when fCLK = 512 kHz) */
#define ADS1291_CLK_DIV16 1 /* 1 = fMOD = fCLK / 16 (use when fCLK = 2.048 MHz) */
/* 属于ADS1291_REG_RESP1的寄存器设置 */
#define ADS1291_DEMOD_EN1_OFF 0 /* 通道一上的呼吸解调电路关,默认 */
#define ADS1291_DEMOD_EN1_ON 1 /* 通道一上的呼吸解调电路开 */
#define ADS1291_DEMOD_EN_OFF 0 /* 通道一上的呼吸调制电路关,默认 */
#define ADS1291_DEMOD_EN_ON 1 /* 通道一上的呼吸调制电路开 */
#define ADS1291_RESPPH_0 0 /* 解调信号相位偏移0,默认 */
#define ADS1291_RESPPH_135 0x0c /* 解调信号相位偏移135度 */
#define ADS1291_RESP_CTRL_INT 0 /* 内部呼吸内部时钟,默认 */
#define ADS1291_RESP_CTRL_EXT 1 /* 内部呼吸外部时钟 */
/* 属于ADS1291_REG_RESP2的寄存器设置 */
#define ADS1291_CALIB_ON_OFF 0 /* 校准关,默认 */
#define ADS1291_CALIB_ON_ON 1 /* 校准开 */
#define ADS1291_RESP_FREQ_36 0 /* 通道一上的呼吸调制电路关,默认 */
#define ADS1291_RESP_FREQ_64 1 /* 通道一上的呼吸调制电路开 */
#define ADS1291_RLDREF_EXT 0 /* 右腿驱动参考电压选择外部反馈,默认 */
#define ADS1291_RLDREF_INT 1 /* 右腿驱动参考电压选择内部信号 */
/* 属于ADS1291_REG_GPIO的寄存器设置 */
/**
* @}
*/
/** @addtogroup ADS1291_TYP_REG_MASK ADS1291 TYP Reg Mask
* @brief ADS1291_GET_BITS与ADS1291_SET_BITS函数调用
* @{
*/
#define ADS1291_ID_POS 0
#define ADS1291_ID_MASK 0xFF
#define ADS1291_SINGLE_SHOT_POS 7
#define ADS1291_SINGLE_SHOT_MASK 0x80
#define ADS1291_DR_POS 0
#define ADS1291_DR_MASK 0x07
#define ADS1291_PDB_LOFF_COMP_POS 6
#define ADS1291_PDB_LOFF_COMP_MASK 0x40
#define ADS1291_PDB_REFBUF_POS 5
#define ADS1291_PDB_REFBUF_MASK 0x20
#define ADS1291_VREF_4V_POS 4
#define ADS1291_VREF_4V_MASK 0x10
#define ADS1291_CLK_EN_POS 3
#define ADS1291_CLK_EN_MASK 0x80
#define ADS1291_INT_TEST_POS 1
#define ADS1291_INT_TEST_MASK 0x02
#define ADS1291_INT_FREQ_POS 0
#define ADS1291_INT_FREQ_MASK 0x01
#define ADS1291_PDx_POS 7
#define ADS1291_PDx_MASK 0x80
#define ADS1291_GAINx_POS 4
#define ADS1291_GAINx_MASK 0x70
#define ADS1291_MUXx_POS 0
#define ADS1291_MUXx_MASK 0x0F
#define ADS1291_CHOP_POS 6
#define ADS1291_CHOP_MASK 0xC0
#define ADS1291_PDB_RLD_POS 5
#define ADS1291_PDB_RLD_MASK 0x20
#define ADS1291_RLD_LOFF_SENSE_POS 4
#define ADS1291_RLD_LOFF_SENSE_MASK 0x10
#define ADS1291_RLD2N_POS 3
#define ADS1291_RLD2N_MASK 0x08
#define ADS1291_RLD2P_POS 2
#define ADS1291_RLD2P_MASK 0x04
#define ADS1291_RLD1N_POS 1
#define ADS1291_RLD1N_MASK 0x02
#define ADS1291_RLD1P_POS 0
#define ADS1291_RLD1P_MASK 0x01
#define ADS1291_FLIP2_POS 5
#define ADS1291_FLIP2_MASK 0x20
#define ADS1291_FLIP1_POS 4
#define ADS1291_FLIP1_MASK 0x10
#define ADS1291_LOFF2N_POS 3
#define ADS1291_LOFF2N_MASK 0x08
#define ADS1291_LOFF2P_POS 2
#define ADS1291_LOFF2P_MASK 0x04
#define ADS1291_LOFFN_POS 1
#define ADS1291_LOFF1N_MASK 0x02
#define ADS1291_LOFF1P_POS 0
#define ADS1291_LOFF1P_MASK 0x01
#define ADS1291_CLK_DIV_POS 6
#define ADS1291_CLK_DIV_MASK 0x40
#define ADS1291_RESP_DEMOD_EN1_POS 7
#define ADS1291_RESP_DEMOD_EN1_MASK 0x80
#define ADS1291_RESP_MOD_EN_POS 6
#define ADS1291_RESP_MOD_EN_MASK 0x40
#define ADS1291_RESP_PH_POS 2
#define ADS1291_RESP_PH_MASK 0x3c
#define ADS1291_RESP_CTRL_POS 0
#define ADS1291_RESP_CTRL_MASK 0x01
#define ADS1291_CALIB_ON_POS 7
#define ADS1291_CALIB_ON_MASK 0x80
#define ADS1291_RESP_FREQ_POS 2
#define ADS1291_RESP_FREQ_MASK 0x04
#define ADS1291_RLDREF_INT_POS 1
#define ADS1291_RLDREF_INT_MASK 0x02
/**
* @}
*/
/** @addtogroup ADS1291_TYP_COMMAND ADS1291 TYP COMMAND
* @brief
* @{
*/
/* System Commands */
#define ADS1291_COMMAND_WAKEUP 0x02
#define ADS1291_COMMAND_STANDBY 0x04
#define ADS1291_COMMAND_RESET 0x06
#define ADS1291_COMMAND_START 0x08
#define ADS1291_COMMAND_STOP 0x0A
#define ADS1291_COMMAND_OFFSETCAL 0x1A
/* Data Read Commands */
#define ADS1291_COMMAND_RDATAC 0x10
#define ADS1291_COMMAND_SDATAC 0x11
#define ADS1291_COMMAND_RDATA 0x12
/* Register Read Commands,最后5位为读写的地址 */
#define ADS1291_COMMAND_RREG 0x20
#define ADS1291_COMMAND_WREG 0x40
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/** @brief 读取ADS1291的指定寄存器的指定位
* @details
* @param[in] bitname
* @param[in] reg
* @retval
*/
#define ADS1291_GET_BITS(bitname, reg) ((reg & bitname##_MASK) >> bitname##_POS)
/** @brief 设置ADS1291的指定寄存器的指定位
* @details
* @param[in] reg
* @param[in] bitname
* @param[in] val
* @retval NONE
*/
#define ADS1291_SET_BITS(reg, bitname, val) ((reg & ~bitname##_MASK) | ((val << bitname##_POS) & bitname##_MASK))
/* Exported functions --------------------------------------------------------*/
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* __ADS1292_TYP_H */

151
app/src/board/ads129x/ads129x.c

@ -0,0 +1,151 @@
#include "ads129x.h"
#include "ads129x_type.h"
#include "board/app_board.h"
#define ADS129X_CS_SET() nrf_gpio_pin_set(ADS1291_SPI_CS0_PIN);
#define ADS129X_CS_RESET() nrf_gpio_pin_clear(ADS1291_SPI_CS0_PIN);
#define ADS129X_START_SET() nrf_gpio_pin_set(ADS1291_START_PIN);
#define ADS129X_START_RESET() nrf_gpio_pin_clear(ADS1291_START_PIN);
#define ADS129X_REST_SET() nrf_gpio_pin_set(ADS1291_PWDN_PIN);
#define ADS129X_REST_RESET() nrf_gpio_pin_clear(ADS1291_PWDN_PIN);
#define ADS129X_DRDY_GET() nrf_gpio_pin_read(ADS1291_READY_PIN)
static void port_ads129x_delay_us(uint32_t us) { nrf_delay_us(us); }
static void port_ads129x_delay_ms(uint32_t ms) { nrf_delay_ms(ms); }
/***********************************************************************************************************************
* BASE_FUNCTION_IMPL *
***********************************************************************************************************************/
static ads129x_regs_t ads129X_reg = {0};
uint8_t port_spi_transmit_receive(uint8_t tx) {
uint8_t data;
nrf_drv_spi_transfer(&ads129x_spi, &tx, 1, &data, 1);
return data;
}
/* ads129X发送指令 */
uint8_t ads129X_send_cmd(uint8_t cmd) {
uint8_t rx = 0;
ADS129X_CS_RESET(); /* 选中设备 */
port_ads129x_delay_us(100);
rx = port_spi_transmit_receive(cmd);
port_ads129x_delay_us(100);
ADS129X_CS_SET(); /* 释放设备 */
return rx;
}
/* ads129X读写寄存器,自动根据指令类型区分读和写操作 */
uint8_t ads129X_rw_reg(uint8_t cmd, uint8_t data) {
uint8_t rx = 0;
ADS129X_CS_RESET(); /* 选中设备 */
port_ads129x_delay_us(1);
port_spi_transmit_receive(cmd); /* 发送读写指令 */
port_spi_transmit_receive(0X00); /* 只写一个数据 */
if ((cmd & ADS129X_COMMAND_RREG) == ADS129X_COMMAND_RREG) /* 判断指令类型 */
rx = port_spi_transmit_receive(0X00); /* 返回寄存器值 */
else
rx = port_spi_transmit_receive(data); /* 写入数值 */
port_ads129x_delay_us(1);
ADS129X_CS_SET(); /* 释放设备 */
return rx;
}
/* 从指定寄存器开始读写一定数量的寄存器 */
void ads129X_write_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
uint8_t i;
ADS129X_CS_RESET(); /* 选中设备 */
port_ads129x_delay_us(100);
port_spi_transmit_receive(ADS129X_COMMAND_WREG | reg);
port_ads129x_delay_us(100);
port_spi_transmit_receive(size - 1);
for (i = 0; i < size; i++) {
port_ads129x_delay_us(100);
port_spi_transmit_receive(*ch);
ch++;
}
port_ads129x_delay_us(100);
ADS129X_CS_SET();
}
/* 从指定寄存器开始读写一定数量的寄存器 */
void ads129X_read_multiregs(uint8_t reg, uint8_t* ch, uint8_t size) {
uint8_t i;
ADS129X_CS_RESET(); /* 选中设备 */
port_ads129x_delay_us(100);
port_spi_transmit_receive(ADS129X_COMMAND_RREG | reg);
port_ads129x_delay_us(100);
port_spi_transmit_receive(size - 1);
for (i = 0; i < size; i++) {
port_ads129x_delay_us(100);
*ch = port_spi_transmit_receive(0);
ch++;
}
port_ads129x_delay_us(100);
ADS129X_CS_SET();
}
/***********************************************************************************************************************
* EXTERN *
***********************************************************************************************************************/
uint8_t ads129x_init() {
/**
* @brief
*/
ADS129X_CS_SET();
ADS129X_REST_RESET();
ADS129X_START_RESET();
port_ads129x_delay_ms(1000);
ADS129X_REST_SET();
port_ads129x_delay_ms(100); /* 硬件复位 */
ads129X_send_cmd(ADS129X_COMMAND_SDATAC); /* 软件复位,并停止连续读状态 */
port_ads129x_delay_ms(100);
ads129X_send_cmd(ADS129X_COMMAND_RESET);
port_ads129x_delay_ms(1000);
ads129X_send_cmd(ADS129X_COMMAND_SDATAC);
port_ads129x_delay_ms(100);
nrf_gpio_pin_set(ADS1291_PWDN_PIN);
nrf_delay_ms(2000);
char txdata[] = {1, 2, 3, 4};
while (true) /* 识别芯片型号,1291:0x52 */
{
uint8_t id = ads129X_rw_reg(ADS129X_COMMAND_RREG | ADS129X_REG_ID, 0);
// nrf_log_backend_uart_tx_raw(txdata, 4);
// znordic_force_flush_log();
ZLOGI("ads129X id: %x", id);
nrf_delay_ms(1000);
}
}
uint8_t ads129x_start_capture(uint8_t* cfg, bool test) { return 0; }
uint8_t ads129x_enter_low_power_mode() { return 0; }
uint8_t ads129x_enter_lead_off_detect_mode() { return 0; }
uint8_t ads129x_data_is_ready() { return 0; }
void ads129x_read_data(uint8_t* data, uint8_t len) {}
uint8_t ads129x_get_lead_off_state() { return 0; }

26
app/src/board/ads129x/ads129x.h

@ -0,0 +1,26 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <stdbool.h>
#include <stdint.h>
/**
* @brief ³õʼ»¯SPI
*/
uint8_t ads129x_init();
uint8_t ads129x_start_capture(uint8_t* cfg, bool test);
uint8_t ads129x_enter_low_power_mode();
uint8_t ads129x_enter_lead_off_detect_mode();
uint8_t ads129x_data_is_ready();
void ads129x_read_data(uint8_t* data, uint8_t len);
uint8_t ads129x_get_lead_off_state();
#ifdef __cplusplus
}
#endif

286
app/src/board/ads129x/ads129x_type.h

@ -0,0 +1,286 @@
#pragma once
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef enum {
ADS129X_REG_ID = 0x00,
ADS129X_REG_CONFIG1 = 0x01,
ADS129X_REG_CONFIG2 = 0x02,
ADS129X_REG_LOFF = 0x03,
ADS129X_REG_CH1SET = 0x04,
ADS129X_REG_CH2SET = 0x05,
ADS129X_REG_RLDSENS = 0x06,
ADS129X_REG_LOFFSENS = 0x07,
ADS129X_REG_LOFFSTAT = 0x08,
ADS129X_REG_RESP1 = 0x09,
ADS129X_REG_RESP2 = 0x0A,
ADS129X_REG_GPIO = 0x0B
} ADS129X_REG_E;
typedef struct {
uint8_t id; /* id,ads1292r固定为0x73 */
uint8_t cfg1; /* 设置寄存器 */
uint8_t cfg2; /* 设置寄存器 */
uint8_t loff; /* 导联 */
uint8_t ch1set; /* 通道一设置 */
uint8_t ch2set; /* 通道二设置 */
uint8_t rld_sens; /* 右腿驱动 */
uint8_t loff_sens; /* 导联 */
uint8_t loff_stat; /* 导联 */
uint8_t resp1; /* 呼吸 */
uint8_t resp2; /* 呼吸 */
uint8_t gpio; /* gpio1,2的控制 */
} ads129x_regs_t;
#define ADS129X_REG_SIZE_MAX 12 /* ADS1291寄存器数量 */
#define ADS129X_ID 0x52
/* 属于ADS129X_REG_CONFIG1的寄存器设置 */
#define ADS129X_SINGLE_SHOT_OFF 0 /* 连续转换模式,默认 */
#define ADS129X_SINGLE_SHOT_ON 1 /* 单次转换模式 */
/* 采样率,该模块采用fclk为512k,0分频模式,其他配置下采样率会改变 */
#define ADS129X_OVERSAMPLING_125SPS 0
#define ADS129X_OVERSAMPLING_250SPS 1
#define ADS129X_OVERSAMPLING_500SPS 2 /* 默认 */
#define ADS129X_OVERSAMPLING_1000SPS 3
#define ADS129X_OVERSAMPLING_2000SPS 4
#define ADS129X_OVERSAMPLING_4000SPS 5
#define ADS129X_OVERSAMPLING_8000SPS 6
#define ADS129X_OVERSAMPLING_NONESPS 7
/* 属于ADS129X_REG_CONFIG2的寄存器设置 */
#define ADS129X_PDB_LOFF_COMP_OFF 0 /* 导联脱落比较器关,默认 */
#define ADS129X_PDB_LOFF_COMP_ON 1 /* 导联脱落比较器开 */
#define ADS129X_PDB_REFBUF_OFF 0 /* 内部参考电压关,默认 */
#define ADS129X_PDB_REFBUF_ON 1 /* 内部参考电压开 */
#define ADS129X_VREF_2420MV 0 /* 选择参考电压为2.42v,默认 */
#define ADS129X_VREF_4033MV 1 /* 选择参考电压为4.033v */
#define ADS129X_CLK_OUTPUT_OFF 0 /* 时钟输出关,默认 */
#define ADS129X_CLK_OUTPUT_ON 1 /* 时钟输出开 */
#define ADS129X_INT_TEST_OFF 0 /* 内部测试电压关,默认 */
#define ADS129X_INT_TEST_ON 1 /* 内部测试电压开 */
#define ADS129X_INT_FREQ_DC 0 /* 直流,默认 */
#define ADS129X_INT_FREQ_AC 1 /* 1HZ方波 */
/* 属于ADS129X_REG_LOFF的寄存器设置 */
/* 属于ADS129X_REG_CH1SET,与ADS129X_REG_CH2SET的寄存器设置 */
#define ADS129X_CHx_OFF 1 /* 禁止使用通道一 */
#define ADS129X_CHx_ON 0 /* 使用通道一,默认 */
#define ADS129X_GAIN_6 0 /* 使用通道一6倍增益,默认 */
#define ADS129X_GAIN_1 1 /* 使用通道一1倍增益 */
#define ADS129X_GAIN_2 2 /* 使用通道一2倍增益 */
#define ADS129X_GAIN_3 3 /* 使用通道一3倍增益 */
#define ADS129X_GAIN_4 4 /* 使用通道一4倍增益 */
#define ADS129X_GAIN_8 5 /* 使用通道一8倍增益 */
#define ADS129X_GAIN_12 6 /* 使用通道一12倍增益 */
/* 选择通道一的输入 */
#define ADS129X_CHx_INPUT_NORMAL 0 /* 正常电极输入,默认 */
#define ADS129X_CHx_INPUT_SHORTED 1 /* 短路,测偏执用 */
#define ADS129X_CHx_INPUT_RLD 2 /* 右腿驱动 */
/* For channel 1, (MVDDP – MVDDN) is [0.5(AVDD + AVSS)]; for channel 2, (MVDDP – MVDDN) is DVDD / 4. */
/* For channel 2,VDD / 2 for supply measurement */
#define ADS129X_CHx_INPUT_MVDD 3
#define ADS129X_CHx_INPUT_TEMP 4 /* 板载温度 */
#define ADS129X_CHx_INPUT_TEST 5 /* 内部测试信号 */
#define ADS129X_CHx_INPUT_RLDDRP 6
#define ADS129X_CHx_INPUT_RLDDRM 7
#define ADS129X_CHx_INPUT_RLDDRPM 8
#define ADS129X_CHx_INPUT_ROUTE 9 /* 连接到通道三 */
#define ADS129X_CHx_INPUT_RESERVED 10 /* 预留 */
/* 属于ADS129X_REG_RLDSENS的寄存器设置 */
#define ADS129X_CHOP_FREQ_DIV4 3 /* PGA斩波频率未fMOD/4 */
#define ADS129X_PDB_RLD_OFF 0 /* 右腿驱动电源关,默认 */
#define ADS129X_PDB_RLD_ON 1 /* 右腿驱动电源开 */
#define ADS129X_PDB_RLD_SENSE_OFF 0 /* 右腿驱动导联脱落检测关,默认 */
#define ADS129X_PDB_RLD_SENSE_ON 1 /* 右腿驱动导联脱落检测开 */
#define ADS129X_RLD2N_OFF 0 /* 通道二负极为右腿输入关,默认 */
#define ADS129X_RLD2N_ON 1 /* 通道二负极为右腿输入开 */
#define ADS129X_RLD2P_OFF 0 /* 通道二正极为右腿输入关,默认 */
#define ADS129X_RLD2P_ON 1 /* 通道二正极为右腿输入开 */
#define ADS129X_RLD1N_OFF 0 /* 通道一负极为右腿输入关,默认 */
#define ADS129X_RLD1N_ON 1 /* 通道一负极为右腿输入开 */
#define ADS129X_RLD1P_OFF 0 /* 通道一正极为右腿输入关,默认 */
#define ADS129X_RLD1P_ON 1 /* 通道一正极为右腿输入开 */
/* 属于ADS129X_REG_LOFFSENS的寄存器设置 */
#define ADS129X_FLIP2_OFF 0 /* 导联脱落检测通道二电流方向关,默认 */
#define ADS129X_FLIP2_ON 1 /* 导联脱落检测通道二电流方向开 */
#define ADS129X_FLIP1_OFF 0 /* 导联脱落检测通道一电流方向关,默认 */
#define ADS129X_FLIP1_ON 1 /* 导联脱落检测通道一电流方向开 */
#define ADS129X_LOFF2N_OFF 0 /* 通道二负极导联脱落检测关,默认 */
#define ADS129X_LOFF2N_ON 1 /* 通道二负极导联脱落检测开 */
#define ADS129X_LOFF2P_OFF 0 /* 通道二正极导联脱落检测关,默认 */
#define ADS129X_LOFF2P_ON 1 /* 通道二正极导联脱落检测开 */
#define ADS129X_LOFF1N_OFF 0 /* 通道一负极导联脱落检测关,默认 */
#define ADS129X_LOFF1N_ON 1 /* 通道一负极导联脱落检测开 */
#define ADS129X_LOFF1P_OFF 0 /* 通道一正极导联脱落检测关,默认 */
#define ADS129X_LOFF1P_ON 1 /* 通道一正极导联脱落检测开 */
/* 属于ADS129X_REG_LOFFSTAT的寄存器设置 */
#define ADS129X_CLK_DIV4 0 /* 0 = fMOD = fCLK / 4 (default, use when fCLK = 512 kHz) */
#define ADS129X_CLK_DIV16 1 /* 1 = fMOD = fCLK / 16 (use when fCLK = 2.048 MHz) */
/* 属于ADS129X_REG_RESP1的寄存器设置 */
#define ADS129X_DEMOD_EN1_OFF 0 /* 通道一上的呼吸解调电路关,默认 */
#define ADS129X_DEMOD_EN1_ON 1 /* 通道一上的呼吸解调电路开 */
#define ADS129X_DEMOD_EN_OFF 0 /* 通道一上的呼吸调制电路关,默认 */
#define ADS129X_DEMOD_EN_ON 1 /* 通道一上的呼吸调制电路开 */
#define ADS129X_RESPPH_0 0 /* 解调信号相位偏移0,默认 */
#define ADS129X_RESPPH_135 0x0c /* 解调信号相位偏移135度 */
#define ADS129X_RESP_CTRL_INT 0 /* 内部呼吸内部时钟,默认 */
#define ADS129X_RESP_CTRL_EXT 1 /* 内部呼吸外部时钟 */
/* 属于ADS129X_REG_RESP2的寄存器设置 */
#define ADS129X_CALIB_ON_OFF 0 /* 校准关,默认 */
#define ADS129X_CALIB_ON_ON 1 /* 校准开 */
#define ADS129X_RESP_FREQ_36 0 /* 通道一上的呼吸调制电路关,默认 */
#define ADS129X_RESP_FREQ_64 1 /* 通道一上的呼吸调制电路开 */
#define ADS129X_RLDREF_EXT 0 /* 右腿驱动参考电压选择外部反馈,默认 */
#define ADS129X_RLDREF_INT 1 /* 右腿驱动参考电压选择内部信号 */
/* 属于ADS129X_REG_GPIO的寄存器设置 */
/**
* @}
*/
/** @addtogroup ADS129X_TYP_REG_MASK ADS1291 TYP Reg Mask
* @brief ADS129X_GET_BITS与ADS129X_SET_BITS函数调用
* @{
*/
#define ADS129X_ID_POS 0
#define ADS129X_ID_MASK 0xFF
#define ADS129X_SINGLE_SHOT_POS 7
#define ADS129X_SINGLE_SHOT_MASK 0x80
#define ADS129X_DR_POS 0
#define ADS129X_DR_MASK 0x07
#define ADS129X_PDB_LOFF_COMP_POS 6
#define ADS129X_PDB_LOFF_COMP_MASK 0x40
#define ADS129X_PDB_REFBUF_POS 5
#define ADS129X_PDB_REFBUF_MASK 0x20
#define ADS129X_VREF_4V_POS 4
#define ADS129X_VREF_4V_MASK 0x10
#define ADS129X_CLK_EN_POS 3
#define ADS129X_CLK_EN_MASK 0x80
#define ADS129X_INT_TEST_POS 1
#define ADS129X_INT_TEST_MASK 0x02
#define ADS129X_INT_FREQ_POS 0
#define ADS129X_INT_FREQ_MASK 0x01
#define ADS129X_PDx_POS 7
#define ADS129X_PDx_MASK 0x80
#define ADS129X_GAINx_POS 4
#define ADS129X_GAINx_MASK 0x70
#define ADS129X_MUXx_POS 0
#define ADS129X_MUXx_MASK 0x0F
#define ADS129X_CHOP_POS 6
#define ADS129X_CHOP_MASK 0xC0
#define ADS129X_PDB_RLD_POS 5
#define ADS129X_PDB_RLD_MASK 0x20
#define ADS129X_RLD_LOFF_SENSE_POS 4
#define ADS129X_RLD_LOFF_SENSE_MASK 0x10
#define ADS129X_RLD2N_POS 3
#define ADS129X_RLD2N_MASK 0x08
#define ADS129X_RLD2P_POS 2
#define ADS129X_RLD2P_MASK 0x04
#define ADS129X_RLD1N_POS 1
#define ADS129X_RLD1N_MASK 0x02
#define ADS129X_RLD1P_POS 0
#define ADS129X_RLD1P_MASK 0x01
#define ADS129X_FLIP2_POS 5
#define ADS129X_FLIP2_MASK 0x20
#define ADS129X_FLIP1_POS 4
#define ADS129X_FLIP1_MASK 0x10
#define ADS129X_LOFF2N_POS 3
#define ADS129X_LOFF2N_MASK 0x08
#define ADS129X_LOFF2P_POS 2
#define ADS129X_LOFF2P_MASK 0x04
#define ADS129X_LOFFN_POS 1
#define ADS129X_LOFF1N_MASK 0x02
#define ADS129X_LOFF1P_POS 0
#define ADS129X_LOFF1P_MASK 0x01
#define ADS129X_CLK_DIV_POS 6
#define ADS129X_CLK_DIV_MASK 0x40
#define ADS129X_RESP_DEMOD_EN1_POS 7
#define ADS129X_RESP_DEMOD_EN1_MASK 0x80
#define ADS129X_RESP_MOD_EN_POS 6
#define ADS129X_RESP_MOD_EN_MASK 0x40
#define ADS129X_RESP_PH_POS 2
#define ADS129X_RESP_PH_MASK 0x3c
#define ADS129X_RESP_CTRL_POS 0
#define ADS129X_RESP_CTRL_MASK 0x01
#define ADS129X_CALIB_ON_POS 7
#define ADS129X_CALIB_ON_MASK 0x80
#define ADS129X_RESP_FREQ_POS 2
#define ADS129X_RESP_FREQ_MASK 0x04
#define ADS129X_RLDREF_INT_POS 1
#define ADS129X_RLDREF_INT_MASK 0x02
/**
* @}
*/
/** @addtogroup ADS129X_TYP_COMMAND ADS1291 TYP COMMAND
* @brief
* @{
*/
/* System Commands */
#define ADS129X_COMMAND_WAKEUP 0x02
#define ADS129X_COMMAND_STANDBY 0x04
#define ADS129X_COMMAND_RESET 0x06
#define ADS129X_COMMAND_START 0x08
#define ADS129X_COMMAND_STOP 0x0A
#define ADS129X_COMMAND_OFFSETCAL 0x1A
/* Data Read Commands */
#define ADS129X_COMMAND_RDATAC 0x10
#define ADS129X_COMMAND_SDATAC 0x11
#define ADS129X_COMMAND_RDATA 0x12
/* Register Read Commands,最后5位为读写的地址 */
#define ADS129X_COMMAND_RREG 0x20
#define ADS129X_COMMAND_WREG 0x40
/**
* @}
*/
/**
* @}
*/
/**
* @}
*/
/* Exported macro ------------------------------------------------------------*/
/** @brief 读取ADS1291的指定寄存器的指定位
* @details
* @param[in] bitname
* @param[in] reg
* @retval
*/
#define ADS129X_GET_BITS(bitname, reg) ((reg & bitname##_MASK) >> bitname##_POS)
/** @brief 设置ADS1291的指定寄存器的指定位
* @details
* @param[in] reg
* @param[in] bitname
* @param[in] val
* @retval NONE
*/
#define ADS129X_SET_BITS(reg, bitname, val) ((reg & ~bitname##_MASK) | ((val << bitname##_POS) & bitname##_MASK))
/* Exported functions --------------------------------------------------------*/
#ifdef __cplusplus
}
#endif

70
app/src/board/app_board.c

@ -0,0 +1,70 @@
#include "app_board.h"
/***********************************************************************************************************************
* MARCO *
***********************************************************************************************************************/
#define APP_BOARD_INIT_CHECK(exptr) \
do { \
ret_code_t ecode = (exptr); \
if (ecode != NRF_SUCCESS) { \
ZLOGE("%s:%d ZERROR_CHECK(%s) fail:%d", __FILE__, __LINE__, #exptr, ecode); \
} \
} while (0)
/***********************************************************************************************************************
* HARDWARE_INSTANCE *
***********************************************************************************************************************/
nrf_drv_spi_t ads129x_spi = NRF_DRV_SPI_INSTANCE(ADS1291_SPI_INSTANCE); // global
static nrf_drv_spi_config_t ads129x_spi_config = {
.sck_pin = ADS1291_SPI_SCK_PIN,
.mosi_pin = ADS1291_SPI_MOSI_PIN,
.miso_pin = ADS1291_SPI_MISO_PIN,
.ss_pin = NRF_DRV_SPI_PIN_NOT_USED,
.irq_priority = SPI_DEFAULT_CONFIG_IRQ_PRIORITY,
.orc = 0xFF,
.frequency = NRF_DRV_SPI_FREQ_8M,
.mode = NRF_DRV_SPI_MODE_1,
.bit_order = NRF_DRV_SPI_BIT_ORDER_MSB_FIRST,
};
on_irq_t ads129x_ready_pin_listener;
static void ads1291_ready_pin_irq(nrfx_gpiote_pin_t pin, nrf_gpiote_polarity_t action) { //
if (ads129x_ready_pin_listener) ads129x_ready_pin_listener(kon_irq_ads1291_ready_pin);
}
void app_board_init() {
nrfx_gpiote_init();
/***********************************************************************************************************************
* ads129x *
***********************************************************************************************************************/
APP_BOARD_INIT_CHECK(nrf_drv_spi_init(&ads129x_spi, &ads129x_spi_config, NULL, NULL));
znrf_gpio_cfg_output(ADS1291_PWDN_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(ADS1291_START_PIN, NRF_GPIO_PIN_NOPULL);
znrf_gpio_cfg_output(ADS1291_SPI_CS0_PIN, NRF_GPIO_PIN_NOPULL);
nrf_gpio_pin_clear(ADS1291_PWDN_PIN);
nrf_gpio_pin_clear(ADS1291_START_PIN);
nrf_gpio_pin_set(ADS1291_SPI_CS0_PIN);
// ---------------------------------------------------------------------------
nrf_gpio_cfg_input(ADS1291_READY_PIN, NRF_GPIO_PIN_NOPULL);
{
nrf_gpio_cfg_input(ADS1291_READY_PIN, NRF_GPIO_PIN_PULLUP);
nrf_drv_gpiote_in_config_t inConfig = GPIOTE_CONFIG_IN_SENSE_TOGGLE(false); //
inConfig.pull = NRF_GPIO_PIN_PULLUP; // ĬÈÏÉÏÀ­
inConfig.sense = NRF_GPIOTE_POLARITY_HITOLO; // ϽµÑØ´¥·¢
nrfx_gpiote_in_init(ADS1291_READY_PIN, &inConfig, ads1291_ready_pin_irq);
}
}
void app_board_reg_irq_listener(app_board_irq_event_t event, on_irq_t listener) {
switch (event) {
case kon_irq_ads1291_ready_pin:
ads129x_ready_pin_listener = listener;
break;
default:
break;
}
}
void app_board_change_state(app_board_power_state_t state) {}

38
app/src/board/app_board.h

@ -0,0 +1,38 @@
#pragma once
#include "nrf_drv_gpiote.h"
#include "znordic.h"
#define ADS1291_SPI_INSTANCE 2
/***********************************************************************************************************************
* ADS1291_IF *
***********************************************************************************************************************/
#define ADS1291_SPI_CS0_PIN 3
#define ADS1291_SPI_SCK_PIN (32 + 3)
#define ADS1291_SPI_MOSI_PIN 19
#define ADS1291_SPI_MISO_PIN (32 + 5)
#define ADS1291_PWDN_PIN 28
#define ADS1291_START_PIN 2
#define ADS1291_READY_PIN 23
typedef enum {
kapp_power_state_uint,
kapp_power_state_standby,
kapp_power_state_working,
} app_board_power_state_t;
typedef enum {
kon_irq_ads1291_ready_pin,
kon_irq_max,
} app_board_irq_event_t;
typedef void (*on_irq_t)(app_board_irq_event_t event);
void app_board_init();
void app_board_reg_irq_listener(app_board_irq_event_t event, on_irq_t listener);
void app_board_change_state(app_board_power_state_t state);
/***********************************************************************************************************************
* GLOBAL *
***********************************************************************************************************************/
extern nrf_drv_spi_t ads129x_spi;

4
app/src/board/board_ecg_sensor.c

@ -186,7 +186,7 @@ uint8_t ads1292r_send_cmd(uint8_t cmd) {
return rx;
}
void znrf_serial_tx(char const * p_buffer, size_t len);
void nrf_log_backend_uart_tx_raw(char const * p_buffer, size_t len);
void BoardEcgSensor_init() {
/**
@ -216,7 +216,7 @@ void BoardEcgSensor_init() {
while (true) /* 识别芯片型号,1291:0x52 */
{
uint8_t id = ads1292r_rw_reg(ADS1292R_COMMAND_RREG | ADS1292R_REG_ID, 0);
znrf_serial_tx(txdata,4);
nrf_log_backend_uart_tx_raw(txdata,4);
znordic_force_flush_log();
nrf_delay_ms(1000);
}

6
app/src/main.c

@ -6,10 +6,10 @@
#include <stdlib.h>
#include <string.h>
//
#include "aproject_config/config.h"
#include "basic_service/app_event.h"
#include "basic_service/app_event_distribute.h"
#include "basic_service/device_version_info_mgr.h"
#include "aproject_config/config.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
//
@ -18,9 +18,9 @@ ZDATACHANNEL_DEF(m_zhrs, 2 /*
/**
* @brief ÀÑÀÏûÏ¢½âÎö
*/
void zdatachannel_data_handler(zdatachannel_evt_t* p_evt) {
void zdatachannel_data_handler(zdatachannel_evt_t *p_evt) {
if (p_evt->type == ZDATACHANNEL_EVT_RX_DATA) {
ble_cmder_process_rx((uint8_t*)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
ble_cmder_process_rx((uint8_t *)p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
}
}
void on_service_init(void) {

8
app/src/one_conduction_main.c

@ -11,11 +11,12 @@
#include "board/board_light_ctrl.h"
#include "board/board_power_mgr.h"
//
#include "board/ads129x/ads129x.h"
#include "board/app_board.h"
#include "service/ble_cmd_processer/ble_cmd_process_service.h"
#include "service/display_mgr/display_manager.h"
#include "service/heart_wave_sample_service/heart_wave_sample_service.h"
#include "service/storage/storage_service.h"
#include "zble_module.h"
#include "zdatachannel_service.h"
#include "znordic.h"
@ -268,7 +269,8 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) {
// BoardLight_setGreenLightEffect(kLightEffect_close);
state_machine__change_to_standby_state();
}
// ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(), plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms());
// ZLOGI("bt:%d plod:%d has_disc:%d state:%d", zdatachannel_is_connected(), BoardEcgSensor_plod_get_connected_state_after_filter(),
// plod_state_has_disconnected_ms(), ds_cur_state_haspassed_ms());
}
/*******************************************************************************
@ -445,6 +447,8 @@ void one_conduction_main() {
BoardEcgSensor_init();
BoardLight_Init();
BoardBattery_load();
app_board_init();
ads129x_init();
// power_on();
#if 0

1
app/src/service/heart_wave_sample_service/heart_wave_sample_service.c

@ -2,6 +2,7 @@
#include "basic_service/app_event.h"
#include "basic_service/app_event_distribute.h"
#include "board/ads129x/ads129x.h"
#include "board/board_ecg_sensor.h"
#include "heart_ware_sample_data_mgr.h"
#include "heart_wave_sample_data_pre_process.h"

2
libznordic

@ -1 +1 @@
Subproject commit 2668dd622893481e990fadd346385af93af3f2d7
Subproject commit 01225055c1cbd6e6b3bc50a5f084d4e515063512

2
scripter/build_app.bat

@ -7,7 +7,7 @@ call scripter\keil_build.bat app\app.uvprojx app\_build\app.hex
del output\app_whole.hex
del output\app.zip
del output\one_lead_ecg.zip
del output\one_lead_ecg.hexb
del output\one_lead_ecg.hex
@REM 检查是否编译成功
if not exist app\_build\app.hex (

2
sdk

@ -1 +1 @@
Subproject commit 1d34e6ac316c27dc0e1149835d5f1ad53e074c88
Subproject commit 864d18285a795072cd58f877237749e22c5baf27
Loading…
Cancel
Save