C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 \/ ^0 ~0 Z( {0 m1 qmain文件:' y4 I* t. j, c
interrupt void interrupt4(void)  1 E% k/ @2 s5 Y" ]
{$ e- U+ {4 {: A9 M0 T" V
  Uint32 sample;7 E7 D6 O. E0 f( ~8 [
3 g) n% r  V; z1 B0 W
  sample = input_sample(); // read L + R samples from ADC. A: @6 Y5 [( ~  ?/ `) n
  output_sample(sample);   // write L + R samples to DAC
6 G2 c( V- X& t) |" j  return;- ~- e1 E% l) _0 J& H
}( J6 s/ S% C% V$ `
! ]3 t: f( a: Q/ l2 Q
int main( void )& X' P! M  x9 g5 V
{# o" Y0 g' e1 @- V
" W0 F4 N7 e% h; u" a1 N
    /* Initialize BSL *// m/ F6 Y6 r$ A9 l
    EVMC6747_init( );
. u: ~% g; }9 d- v" ^# D6 R        /* Call evmc6747_intr function */
! Q! m1 h) y" j8 @7 A    aic3106_init( );# S2 d$ `. \4 w2 P' t  }- i8 `
        while(1);1 I3 s6 u+ c  ^3 V( N2 F. D
}
2 b3 d+ A& d( ]# C) v
6 T) n. G8 Z8 ?# F" O: q) Z0 g* [5 E# ?5 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* _# H0 A  R5 O# l7 D( |# N
/* Initialize MCASP1 */. i3 u5 h5 ~% J% Z
    mcasp = &MCASP_MODULE_1;0 u( v6 M' V- Y
    mcasp->regs->GBLCTL  = 0;       // Reset
( \. l! a8 |1 m" {/ Q4 q9 a2 H    mcasp->regs->RGBLCTL = 0;       // Reset RX
* E$ \: f/ E- m, K1 L) X) W    mcasp->regs->XGBLCTL = 0;       // Reset TX
) E  U% o3 }! z& H% Z7 [7 D    mcasp->regs->PWRDEMU = 1;       // Free-running
& T* Z1 F- g% v4 Y  D   // configure McASP0 receive registers5 b2 S) d) p8 H: M- F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 j5 x% Y( s+ B) i5 O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- ?7 q2 ]+ J. ]$ Y) d    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, T0 t2 X) D# o8 c+ ?, D$ {    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 k6 K: g: m. x. ~* O! e9 B/ n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 T/ p, Z" E; W1 t( r/ A3 {( a! g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 Q1 b9 P: c! Y5 j! R( |4 e- Z6 D4 m
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* }' @! K' W* R/ L    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" M  q- Y) T# U5 U# E/ I. p0 c
# G  }' w5 U$ r8 K8 O    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ V3 V2 u& M% _3 c
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 p6 m, q+ ~2 \5 U  ~0 Z    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( a+ Y  t+ D+ k# J. ^, z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 d! V0 B6 n4 }
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) ^4 [9 n3 H5 ~; V) ~    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 A) v4 W/ O) @. k& p# T, F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; v7 H! s1 J  D5 {0 {& u7 L4 ?4 D
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  ^+ b; `' q3 J! L
7 Z2 v9 Y( H* M5 d    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 r/ h5 W5 s( }4 s1 z& |& _- i
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 k0 b( ]. D3 [; D$ r    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 t" k1 Z7 [& \4 g8 D' x    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  l4 n1 K1 }+ e: N2 i
% ]9 r' s) M9 \! W7 U; ?2 b; h
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 b) T7 i7 T: H# W" W8 e    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 ?+ s: U) E7 j4 f9 W    mcasp->regs->AMUTE      = 0x00000000; // Not used
" H( h: I1 b/ ]# n9 r6 V; K8 i$ i5 Z7 Z- u) b
/* Starting sections of the McASP*/) ~. b% V' W, W8 W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Q' N# B3 y% r# K( V7 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 A  K7 u2 n& _2 Y% k) X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * c8 B% i- U( {% E' _8 a' T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: E& A6 X& x2 M" ^

# ?2 O( R, e; p+ e! e    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 Z4 u: |+ T( F7 n# L6 Y: |* L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- H9 V  H1 \- J2 s  a6 e$ {: ~  s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 J. R/ B$ ?0 Q# a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  U, F0 K/ d7 O: o) l% e9 K/ F3 r5 s( ^. e- g$ v4 o7 ~( V
    mcasp->regs->XSTAT = 0x0000ffff; " [5 @1 C) a. {0 a/ ~
    mcasp->regs->RSTAT = 0x0000ffff; - }- G1 C% i5 Y5 F5 O  [& G
, r5 [" L/ @, S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! ^6 b3 S) ?  S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 c& E- r9 S2 V3 D# O% |. Z! I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , K9 [) ^0 F* _* Z, ?2 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 H9 e3 A9 ~$ c$ `7 q4 W! n( i8 F8 j( N0 p, u0 R" F- ?/ {
    /* Write a 0, so that no underrun occurs after releasing the state machine */
2 V  S3 A; O7 `" R/ Y: m, G* {    mcasp->regs->XBUF5 = 0;& r) x. h' g$ @6 |  {9 J: g
    mcasp->regs->RBUF0 = 0;
: G7 M! C4 F" A7 `5 k
& S! f0 V' O0 V) j, m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 f( T+ {) s1 A  B6 m# J/ u0 {. l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" k/ }' C' W, _& C! A2 @2 Q) D    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ }0 \6 s% y6 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
9 d* i6 K5 G, p
, m; S* @- o$ U6 o" v9 M5 J4 f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! {7 s: K# {+ t) ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. f" z  h" V) i+ m; p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
& X) x" o: \- ^2 W* d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ V' V% w& p! ~7 Z7 b% ]: w+ B) b: K) a2 y: m0 ]
    CSR = 0x0000;
# B/ |2 g+ U  D1 J    INTC_INTMUX1 = 0x3d;
7 m% a0 `4 s5 [* K    ISTP = (unsigned int)vectors;0 S9 t" h+ m+ Z8 F: V
    ICR = 0xFFF0;  4 g% N. k6 l# u4 u, ?- |! |
    IER |= 0x12;  / h$ g3 Z5 E# q4 ^- l
    CSR |= 0x01;  
' `) {* d; c& ^: Q- v! ^2 S% C. f5 Q$ f* D/ d/ K
$ O% Z$ K: S, T
6 {8 q- d4 {3 R9 [- h& E# d/ T; w$ P7 u
还有就是两个输入输出函数:
' j! c/ r# r6 v6 lvoid output_sample(Int32 out_data)
4 c; _2 h3 |, d! G- p3 x{3 ^* C8 [& a! C1 M6 |3 e; P" f2 q
  AIC31_data.uint = out_data;  
6 r5 |8 Y0 L! I% L# a6 v  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 _1 ?  v" q, Z+ U" @& _* ?}
- E; V5 R0 P) i& z
) s) {' i4 g8 F. a, HInt32 input_sample(void)
2 p# R) l$ F' F! o+ ?' K1 {{  2 X6 H4 Y; w1 U/ g2 B
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 o- b, J  ?/ A0 y- ]7 t: ?  return (AIC31_data.uint);
7 [/ u' z' E/ R, n) z* l  u}
+ W1 c# X& i* y! l2 e2 Z5 R5 I# p5 L0 `4 z$ A( M
分享到:  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-1-5 17:42 , Processed in 0.039416 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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