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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" A; W7 B! ?! J1 o
main文件:
0 [4 d, i/ E. E( ]( i3 l/ i+ D5 Linterrupt void interrupt4(void)  ( f# k7 y6 j6 t5 a, R& B
{
$ [- t( @7 @+ t7 `6 `, H  Uint32 sample;
; w) X8 s# ]- b2 ?8 V5 Q
. N% y; [/ p" q/ x1 L6 P. }  sample = input_sample(); // read L + R samples from ADC* x  ~4 e& H8 m" }5 s' Z& s( ?
  output_sample(sample);   // write L + R samples to DAC 5 g% r" x) F6 w1 K
  return;$ X& W2 t$ _$ A3 H/ w9 u# S4 I
}1 J9 T8 d7 S! ]! k

7 m! [. u2 F8 a' s" r& U4 N$ rint main( void )
: m: N' R, m- ~5 x3 C4 [{8 A4 F  b& g& s6 A/ R
. T5 j+ R8 o$ Y& ~3 y- V. ~, l
    /* Initialize BSL */
+ @7 o9 m! ?# f' `$ ^    EVMC6747_init( );, A  ?/ W- h" c/ V
        /* Call evmc6747_intr function */
: ^9 ]' I3 o  E; O/ [9 t* t8 e    aic3106_init( );7 M6 ?- m% ]8 _5 j5 U" }0 c
        while(1);
5 g& M# b6 x* v( `; l& z3 C- i}# W. C% m1 A- @" i, E9 f% c

; e4 g2 z1 \8 z1 p8 J3 `& C8 L
% F% ?) c+ C/ W# Yaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) ^( w9 M9 d. C" l/ f1 k* I
/* Initialize MCASP1 */) |, _" a: Z0 i( H! i) C
    mcasp = &MCASP_MODULE_1;8 w+ U2 N/ E- J4 f0 l' O4 [4 \' X
    mcasp->regs->GBLCTL  = 0;       // Reset
+ u4 V: k2 N1 b4 v% `    mcasp->regs->RGBLCTL = 0;       // Reset RX1 _" n7 h7 {" w, `8 T
    mcasp->regs->XGBLCTL = 0;       // Reset TX! u6 K" @( h7 a
    mcasp->regs->PWRDEMU = 1;       // Free-running0 y7 y% Q% p* T# p" i
   // configure McASP0 receive registers$ z0 Z" p: y0 r0 U' {1 H" b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 a2 p5 B; j% S4 ^! X' ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 H& R5 |5 A; J) ]$ e" m. N0 a; W2 V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# s& V0 Y! u  l% l
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- {) ]3 A3 d& x: @# c    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), q% N& j* s9 j( o7 j
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 m9 V4 E) `9 F8 U, F( @0 l    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. D& p: y4 _5 j% H& y, M$ a$ _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ u$ Y* b" @3 s3 G7 I
3 t/ s5 y9 C* B! Y7 q1 Y$ f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 c: K2 A7 d$ }1 W$ e    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 P6 X2 m- \; h0 \) j0 m4 j- b
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 J/ c% R( c9 l" b; }/ W0 K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16" P% j/ f% q7 }( L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 @, m1 z) ^7 I2 I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 G4 |$ [! R' c    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 ^# r6 B. A8 Z# S    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 f- K8 ]; y+ X" O6 T$ ~! c/ j$ L( u; h9 Q: j
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- O; w6 h, Z, `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ Q6 P8 r; ~4 g+ c: l; \, ]    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 @' I1 w9 Q' r* E5 t9 x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 y2 \6 f6 J; [: _$ o$ P
" W8 g1 q* I- E1 A; P, [. b
    mcasp->regs->DITCTL     = 0x00000000; // Not used
: P- F3 ]0 y& Q! e( h  k* a5 u. y    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 ^* Z8 q3 s8 d; E
    mcasp->regs->AMUTE      = 0x00000000; // Not used
' t9 j- z5 W# M* s7 c
* r  Z: [4 |/ f( h9 }1 L; G5 I# C/* Starting sections of the McASP*/, z1 I: ?/ n: u; r$ n
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- u* n8 z: }/ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % o- X/ Q( W: r3 r0 l; S$ Y  b
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * \1 I# d0 _: v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% K& b( A  {+ d0 l4 w- j

! l5 G. }- A5 {$ l" ?, ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) E& \( O" o9 @" k: [+ P0 b0 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  s( E# W* E6 |2 {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - h- G* `3 {& E+ |( z/ n) s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 k+ u8 y& o) k* J

5 E- B6 Y  u, S6 j    mcasp->regs->XSTAT = 0x0000ffff; & f8 N! o. k" K  m( D9 n
    mcasp->regs->RSTAT = 0x0000ffff;
- q, j# {0 C& M4 `1 C& D1 g" X' q% v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) S" J5 Z8 i' g4 w8 d: P1 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; E( K1 T1 t. m; H7 K' }
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . J) u5 b4 O: M. S1 ~2 ~) I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# a4 H0 n% W" Y3 Y7 ]7 s5 e% W3 ]/ @! [/ h
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; W( T6 V7 `9 M, }    mcasp->regs->XBUF5 = 0;" L# m- G4 C* f1 S3 l1 V% s& k
    mcasp->regs->RBUF0 = 0;
2 k* n; a4 R) u+ {0 Z5 p# r. A( v
  A2 d9 v- _6 g; S, K* Z. L4 i  t/ [    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 V& \( A; g4 T* M9 t6 n" ^* b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W0 M- {5 h- A& B( I4 j, H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 i( D2 M4 |4 W  ], K- I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
$ q4 |7 q* K3 H9 }) o9 }8 I; ~- ?2 z; \2 c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ H/ |' e, B7 ^0 j9 Y+ V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, B% F5 M6 [4 M3 P# M5 f
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; " M4 z" a% k" w, f8 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 {  Q% v% G0 d* _' p
& q* D1 z; E& F! A: g    CSR = 0x0000;. Y6 W1 z5 m5 g
    INTC_INTMUX1 = 0x3d;
6 C3 D% p' {! [, v    ISTP = (unsigned int)vectors;* i3 V2 H& }; n( v" z/ P
    ICR = 0xFFF0;  7 P9 e" X0 y# P1 ]
    IER |= 0x12;  ' L8 V" M) j* Z+ ]
    CSR |= 0x01;  
3 ~  l! U& Y9 g, m' b0 `3 v* u! U* d

$ u2 n7 ^) f" ]+ S
. U5 M: x0 {. Z还有就是两个输入输出函数:
% v: q# U5 r! Uvoid output_sample(Int32 out_data)$ q% U" u6 S# T, O  N$ I
{" y1 e! b: [+ p6 V
  AIC31_data.uint = out_data;  
; d9 ]3 o- a" |9 M  \4 O& d( @1 J0 W  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. @; W8 z* T+ u}
1 e7 x: q  e& S4 b! l
, t, k: Q/ T) ^) H1 g# m; s7 FInt32 input_sample(void)
* A2 ^) ?5 s# v% s3 i{  - f% |$ `8 L" |( ]+ p0 g% Q8 N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: E6 U5 C( _! }/ W+ D- m  return (AIC31_data.uint);
7 L' i8 N0 l' q) s}
6 k, [* r: Q, r& [! t7 u8 e+ ?7 m; V
: t) k9 a/ K) r/ c  J+ V
分享到:  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-2-9 17:14 , Processed in 0.042102 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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