C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6526|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 d4 w5 R( r; K) }/ P$ [7 {  b. A+ l" \main文件:2 W6 t* E3 @# v8 k# W9 w
interrupt void interrupt4(void)  
& b6 ~; I. ]: w. |8 T+ z' I  S{3 m( a% W4 ~% n1 d/ K5 K" d3 X& W
  Uint32 sample;
, z0 ~# y& h( M& x  }; o  h1 R
. f/ h& N$ O! Y% V  sample = input_sample(); // read L + R samples from ADC
3 R( R" q5 G9 `+ [9 ?% R  output_sample(sample);   // write L + R samples to DAC 5 ~1 d. v, a8 _: G6 W. t
  return;
+ K2 P0 m/ R3 @# f2 j}
' u/ l' x( X; p1 i8 F7 _: M* ^9 Z+ Y" B' g* |
int main( void )% E: B# l; ^1 x9 ?/ R
{# h( j5 X. g. u$ e

0 }3 i& P  I' d" Z3 k% z    /* Initialize BSL */
+ c) _% e1 m, S! J/ Z# o# t9 V; V    EVMC6747_init( );; i) f  q  C* f& X/ i
        /* Call evmc6747_intr function */; i9 ~' z7 }. j: ]( G( \
    aic3106_init( );
7 Y4 |8 f' o% `' K& f        while(1);) n; o7 Q$ L0 ]! H; ~
}5 l, A% a: U' F# X1 |

* ~* f# d$ M' D; J2 n9 d5 I% ^, q9 i3 Q5 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- a8 L7 E; v8 Q, q/* Initialize MCASP1 */
$ N! H, ?! v5 K( c) X; d    mcasp = &MCASP_MODULE_1;
+ |1 p# v8 U0 V/ R* u( S& F+ ]    mcasp->regs->GBLCTL  = 0;       // Reset
: l+ o( [! v9 ]- d/ i8 D) |& [5 A2 C( G    mcasp->regs->RGBLCTL = 0;       // Reset RX! n8 w( r+ j  P! j
    mcasp->regs->XGBLCTL = 0;       // Reset TX% K; ^' J- I0 ]9 G8 r7 v* c3 u
    mcasp->regs->PWRDEMU = 1;       // Free-running* g% _4 j# \' ^; D/ ~3 T  y* z
   // configure McASP0 receive registers
# v2 `0 |' k% ~    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used- i* @/ x. [- t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 Y  o% o; m/ z4 S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ z9 x# P- \4 b: S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 ^: P8 I# r& g% z; B- v8 o6 I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 R) I$ w7 E6 g' j3 O! p( b    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 }' w) T( V8 w4 t9 l6 U; d    mcasp->regs->RINTCTL    = 0x00000000; // Not used! Z( R( X; J7 w3 M
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 R1 D' l" K+ C1 k
! t, h9 V( @* C0 U" G; q  ~0 S# e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ `4 q3 Z" O  z  f
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ A" x$ i9 ~6 q. a1 F5 ~
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# H9 y7 W# d! L' U7 x/ K& P3 W: V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T. i  z5 d7 g
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( c) c9 n$ r) e' h: t, @! m    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ F' F' R$ Z5 i5 z# d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 D+ z( \1 `! M0 v' D1 x    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" s: d- ~1 ~- [; R+ X+ [) m) z( g0 g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# P) A9 {. N% Y/ x: Q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, h+ [2 A8 Y" K+ c9 i. O1 v    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 ]; f6 h& a7 W, e) G, |' O    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) b5 @+ C' R% E2 L! v

- A. l* [. {! {. J    mcasp->regs->DITCTL     = 0x00000000; // Not used
, z: e! H2 q8 \4 B, U' y4 m    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 b$ ~5 y) R9 ?/ C( ?$ I    mcasp->regs->AMUTE      = 0x00000000; // Not used6 i4 S& A1 r3 A3 P

" A3 C" J) X; d5 e" x5 z/* Starting sections of the McASP*/( R" A+ a+ A' d1 i" R% e9 U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , ]1 e0 @- I- Y+ m6 g0 x6 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 s/ n  l# \3 X  Y- L% [) L. T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' h1 A7 v# o. s! ~3 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# S+ G9 ^1 W( Y9 r) d/ C& R7 a, \" T3 i' C$ V7 G
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # x) G7 _$ a1 o- s" |. n5 v  L$ u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* p( X2 \$ w1 Z0 s% N: k! Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 I! N! w) y$ H$ h- Q: b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ n* M9 r+ y4 M( [3 X

7 V6 e+ {7 H1 i" q8 u- [    mcasp->regs->XSTAT = 0x0000ffff;
- ?+ j/ C! O+ [    mcasp->regs->RSTAT = 0x0000ffff; + k. x5 W: j* W) O( u' y4 u6 w
- _1 O) `% [  \  ^9 T1 B9 O
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 ~" d9 ]- W' c9 m* M/ L3 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x! _3 s& ~) y( f: l& i. q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 k5 E: A1 q) Y! x0 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* v0 }4 W* B. I0 v) B; @: X& J
8 a& }; x8 W0 l$ P7 B! z+ U    /* Write a 0, so that no underrun occurs after releasing the state machine */7 {0 O/ l  ?) E4 z; O! d1 X% N! ?
    mcasp->regs->XBUF5 = 0;1 O# T! S7 a/ T  n9 m
    mcasp->regs->RBUF0 = 0;: i7 a7 Q# l. n- [

2 C: i  l$ }$ s4 a  X8 I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! F, T" ?. g7 A: C9 ?& G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 T$ v  [& }0 ]3 D" u; ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : ?+ `7 C0 y* @! y. v, b5 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 |( Y' T# Z9 ^( T. }2 p5 v; Z
. |8 m$ y2 J% l  ^9 {% B    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
% O/ V  ^' j# i6 [5 h, |6 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ I" r! f9 i$ D' Y% |+ W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
+ M' H! b: e! W5 o( }# Q) x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( [/ z$ k5 I* p" _9 ^; @  z
' D1 X9 o" S: B+ }3 n: ?
    CSR = 0x0000;
8 n" M3 K3 t7 x  A0 i% i3 F    INTC_INTMUX1 = 0x3d;5 f! J/ ?! [) M* [) D$ t2 }, }
    ISTP = (unsigned int)vectors;+ O/ M0 `5 D/ g6 F3 G: j8 i* m
    ICR = 0xFFF0;  - P$ ]" ~+ S) i
    IER |= 0x12;  8 S1 H- F' I: D; \* s/ Y* y
    CSR |= 0x01;  
+ {  W& X: {% I2 G0 [5 g# W
5 o' C+ x  f" J( g/ z7 i/ d- b" ^( p7 \
& I( V9 ]% G7 F
还有就是两个输入输出函数:
9 O7 |0 @, r7 L- h* {0 p$ G: a& kvoid output_sample(Int32 out_data)
' M1 F' a. X  o{6 E4 q9 a1 l4 t9 f8 x1 m. j. r
  AIC31_data.uint = out_data;  
. L1 L* ?! ^6 K2 h2 z7 q1 O0 K  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: U3 H9 L& X+ G/ E}& j- V& i/ ?: |  W; T* P/ y

, j4 I! @4 |, x& ^: a3 yInt32 input_sample(void)
: z" b# y* _" t$ y1 c{  6 ~1 X- i/ ?5 v4 X
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' F6 N$ Z* c2 v2 Q  return (AIC31_data.uint);# z/ A% V4 q* j* \( A1 l# U
}0 ]* `! V7 {7 R3 U
% Q/ X% v2 u% ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-10 06:05 , Processed in 0.041741 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表