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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) E# q6 r& V; ~/ }8 v* Z% U7 Xmain文件:' T- u& Z" V% W& B+ d
interrupt void interrupt4(void)  
( M; m# s' \) t7 L( R' n# X{4 M" f2 c3 m4 d+ }! t
  Uint32 sample;, K7 [/ A$ [, O/ U1 ?

, g: U' J% r7 R  sample = input_sample(); // read L + R samples from ADC
, q6 E) H8 C8 Y5 q3 u* X  output_sample(sample);   // write L + R samples to DAC 5 l  U4 ~# o5 k! y' U
  return;, x2 X) t" E2 E3 S/ p3 V
}
  d' [5 ]( q. @3 {) [
6 h. w) y4 s* O( |int main( void )9 e& s# U  v) A, V1 {, J6 }
{
' S2 k$ P- o) \( s. j3 }2 n
5 {* M/ \( W/ _* I) f* Z* n    /* Initialize BSL */
& x: B6 Q% ~9 y' T, ]+ @% i    EVMC6747_init( );/ u' g' [0 H! p9 H8 E( l
        /* Call evmc6747_intr function */; E- T/ O! u2 g% \2 O4 U
    aic3106_init( );
  o4 q9 f- P2 M" u$ }+ l        while(1);
* c3 C5 _, _+ w* s4 W' P}! j' q. }. z( j" ]5 X
9 w+ l- Q- f/ S* b

3 q& P- d! `' T; [0 i; X# o) z- kaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 S0 O9 [$ y# l) q7 k+ h3 M
/* Initialize MCASP1 */
5 P) K% s2 ?2 {) a* X    mcasp = &MCASP_MODULE_1;
) x* g% a1 o9 S* z8 A# ]; k/ E    mcasp->regs->GBLCTL  = 0;       // Reset
5 c4 ]5 @0 f& E5 B    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ I8 G( W2 K# x8 B! i    mcasp->regs->XGBLCTL = 0;       // Reset TX
* L$ W9 _2 s7 i    mcasp->regs->PWRDEMU = 1;       // Free-running- ^% @: T, j: [8 k1 |" H
   // configure McASP0 receive registers6 _- y5 Z8 M  E* ]3 }$ j, z9 l! z( O0 e1 T
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% b, f) Y- \6 }    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 m4 a- H- k+ C9 O* N. C4 y4 T    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 U, z/ q" M# B! y7 d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. m# U2 e; Z0 N5 N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 V* Y7 p; U( j: m: G% s" y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' Z+ }: o! q5 X' W' L. g9 F& s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  P7 c) M% \3 `& N; M+ e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( \7 @5 P4 Z8 D7 i: s
& H0 p* U' J3 q, S" D* c' D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
; _7 o# B% v2 b( V    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: E' S- v) E) j- V) a& W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& }0 t1 x) L: E4 q* }; |4 Q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 R: A4 o3 \- K8 A1 I    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 ]. S& r; K; O' S  C- u4 t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! [, Z& {8 I0 J
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 t# ?# S4 Y  C* q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  N# l: r/ L; \2 y
! k4 Q/ H% E2 U+ }6 A0 u
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# J( ~; q, U' A1 G3 V( i7 V* |; D
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! _1 v/ i5 l0 m8 D
    mcasp->regs->PFUNC      = 0;          // All MCASPs: M$ |' {" x8 j0 h
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* K. U" ~9 b' M$ V

0 u0 ^7 W: @0 t    mcasp->regs->DITCTL     = 0x00000000; // Not used5 e7 Q) V) u" }, T/ Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 T0 _9 {- s# Y; r  M5 F, D    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 ^1 S; W# |. t) A7 |3 {
! f3 Z9 y+ h4 f6 z; d/* Starting sections of the McASP*/
& r. i4 w- v& ]! Z2 X8 N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 E# \: e% m$ V6 u7 ?/ M1 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ C% M& `% g+ V( ]+ Q: T    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / t) e4 V& d; f: L- w& k6 |- L* }: ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( q- i, A" i) m$ {: b
' N* H3 ?: g1 E+ X* E    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 Z+ H# w" ]- V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; p8 |7 L7 X. C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( t$ T7 c) y& ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" `- Z( _5 o2 U4 a
0 x) b0 s# N$ u% i( R    mcasp->regs->XSTAT = 0x0000ffff; 2 w6 D5 j- q; N: g; R* q* x/ l, Z
    mcasp->regs->RSTAT = 0x0000ffff;
! m  E6 _9 s# C1 v; J" K5 J* C/ n
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ y+ ~$ d( ?. x$ Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) S3 @" i9 U5 {
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - P7 ?* }$ p3 U' _# Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  g) z/ R" |: F; i# i  m
# w2 M3 @7 M: O' V! l    /* Write a 0, so that no underrun occurs after releasing the state machine */9 z% U9 h! I! v9 ^& z) D! N( h. C1 q2 E
    mcasp->regs->XBUF5 = 0;
7 M; y5 M( N! W' n; e' Z! c4 g    mcasp->regs->RBUF0 = 0;( @4 H' C6 J# W8 g% }6 q
6 g" {" L2 ^  V& }2 @0 E# c1 L* X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; X; k/ w" [, `, ^! A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* S8 |2 x/ Z- |, q7 F$ d/ f    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 @: o8 [$ o; l/ n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% U3 V- G6 b8 n; z0 d# L* @" k% d4 t0 t2 n) t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
& ^7 B' i" M2 i  e* `; y$ t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! P! F% [5 j+ R  G& y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
7 |) p# o9 N+ V8 ^' r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, R0 \+ T! b+ [! C

8 x/ d4 V: d* z9 q( m    CSR = 0x0000;, q9 L- I: [7 Z: s$ o3 n
    INTC_INTMUX1 = 0x3d;
3 {/ w. j0 n& @: G  `! |    ISTP = (unsigned int)vectors;
7 J4 f# y" A& H/ q6 V    ICR = 0xFFF0;  
2 F) D- u6 u% v$ ^    IER |= 0x12;  
" v3 H$ |5 J1 j) S    CSR |= 0x01;  
7 P" Y1 d: q6 R2 R$ S. D8 `4 A2 |
2 K& ?! P& c2 x% H3 R
+ U# ^/ q3 l; q( k  c9 m7 W$ e/ h/ b) z
还有就是两个输入输出函数:
9 y  V4 O3 V1 {8 J  ivoid output_sample(Int32 out_data): h% Z4 O1 ^' x- r" l
{
4 z# n8 U3 x* F8 n3 k  AIC31_data.uint = out_data;  
9 t, x) B# \2 ~3 U0 Q! r  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 P( B: y; o9 ^( E
}
% b8 Z2 _9 t: ~$ T
9 p0 A0 ^7 x" G" m3 \; H% mInt32 input_sample(void)
7 k# L$ i$ W) b& d1 K{  
& H0 K+ C) J( Q, e( I4 H8 p7 s9 P  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. U: M0 t# n" a8 c% q& v  return (AIC31_data.uint);
  p+ T, R3 w, b& x% b}1 I) w1 Q2 _- F3 F2 q
- m' c* F, F0 u1 U2 `
分享到:  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-7 13:51 , Processed in 0.045630 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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