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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" Q3 W% h& S& y
main文件:5 j3 S* f( L" N# ?" G
interrupt void interrupt4(void)  
# o( ]3 Z; J2 f! h, P) p{% P. N4 {4 ~4 V9 }5 s
  Uint32 sample;8 b& i1 e! b5 Q" B1 u/ Z# A: j

8 r, d  `8 F' k7 L  sample = input_sample(); // read L + R samples from ADC
- [7 ?# {, K/ P0 L  output_sample(sample);   // write L + R samples to DAC
9 B$ v1 G, }# h! _4 F7 `) X  return;: L) Z% f0 h) V# g
}% O+ X" C0 O2 U' q/ r! v1 m0 O* g$ L
6 O8 E. }5 i+ U, F# a
int main( void )
$ E8 X2 o3 r2 J8 o% m{
3 s! ^  i1 s, T4 W) J) l3 t6 Y3 |- T& ~1 h0 w) ?, P* S
    /* Initialize BSL */4 v+ q9 u7 d" a6 k5 P9 V
    EVMC6747_init( );
) }  C$ w& R) X0 R0 M        /* Call evmc6747_intr function */+ {$ ~& O. |  ]! F- A' {8 {
    aic3106_init( );
! H) T' m; Z6 A1 D        while(1);' W9 G0 a& e1 X9 r4 L6 \6 R$ ]
}" B. o; M- I  n% P9 {$ s+ n
5 b, o% {1 o& j
* i  K% N  ?1 m2 H8 x0 K: c6 ]+ I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 X) K: f, v. |. Y
/* Initialize MCASP1 */
! g/ B  v) m; s7 p* ~9 f    mcasp = &MCASP_MODULE_1;$ P. i! v3 u  V0 @4 F
    mcasp->regs->GBLCTL  = 0;       // Reset
  U3 ^$ Q* F' Z% o: l    mcasp->regs->RGBLCTL = 0;       // Reset RX# R" N: [' N: Q! R6 X  P
    mcasp->regs->XGBLCTL = 0;       // Reset TX3 j  r6 X4 u& M) h' N
    mcasp->regs->PWRDEMU = 1;       // Free-running
9 A  P! d( K3 C; @( ^6 K3 z   // configure McASP0 receive registers
+ E3 {; h8 {$ u6 \# ^7 i# s    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# ]- M, T- t, \- Z2 f$ P    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 W+ l9 R2 w3 C6 h- c$ _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 o& Q$ O! }+ ?8 e9 u5 Z$ J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" E; S5 M9 r' K' ?0 W/ @
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 G3 N, d# H8 q8 }9 M( \+ W  ^! [5 {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, v+ b1 q  f) `% z1 F; f' P    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 \4 D  c/ b. Y) A, J: g. v
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& f1 t0 W1 U( k0 S& m- ?, |8 E
* o2 \, o' B8 d
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
" m1 s, D) H; w& \# f7 V3 @: k; N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 s* Y+ K* Y; ~: h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ h! @$ k3 H0 F0 M* Y# [( A% h6 c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ E& A+ N- [/ @: \' z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) i8 C1 ~8 i& ~7 W3 M  j
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1" K2 [8 V% V+ p+ N6 f- F* o9 t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 z7 b( z/ i( a# b' N    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- N9 n$ j+ r, E3 ~0 [9 o" ^# V
7 K, g2 y, u2 t6 b# C2 b    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( M5 H+ b- w/ c+ v  _    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 U, A" H" [$ n4 x
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 i. R) k  @( w- S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" l) u' V- w' I/ K
6 Z3 Y! a% v1 E9 J* ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
, P" x2 j! S% g8 D1 H$ J5 I    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 a5 j% C7 o6 o! ]. m2 ~+ r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 h. q! S. ^- p9 J' j% }+ V
* Y0 ~! [* }' ^/* Starting sections of the McASP*/9 J' R% H0 c2 b2 }( H* c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& n5 j5 Z  v, N5 @: d+ K  z$ t# N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 ^& }' Y7 l2 {5 {    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* g7 a! m8 p* d2 w4 w5 C3 B' T. {8 r! S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ i4 ?# u4 F" s! l! S9 g& l# `0 f* |; _+ n: S  Y: T) l
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' W$ w. n( U2 I# l' S' a; ]( R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 R& d+ V* [6 J: m
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) J, ^2 X' f9 P( Z* d; S& }, m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& y! Y% B: @" T3 ]; ~7 D

3 ?+ d3 q; e& P& z( Q    mcasp->regs->XSTAT = 0x0000ffff;
. v; @4 [3 o2 \3 S# K8 u, K    mcasp->regs->RSTAT = 0x0000ffff;
% M+ ~* ]# z9 r! [( k+ j- K" [0 v: `" }% r9 s7 O( @! v9 a
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;5 ~9 F' g. @) Y" ^6 v0 z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ Q  H) m7 J9 G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( w. l8 s% F) c* q! f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" s2 J8 H2 p7 a1 O2 i. ?: q* n- l$ Z/ a9 K0 P6 r  z$ T7 l/ S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 @% j" s. i: O  G    mcasp->regs->XBUF5 = 0;. f( z0 `1 y0 z) F5 x6 G
    mcasp->regs->RBUF0 = 0;
3 T  i$ c9 q( J: i
! E9 Z; f3 l& N3 s! A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 B$ K4 b$ a2 j8 g' D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ `9 X4 M2 ?' ]- x  ~. b
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" d: }- u9 L5 d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, ]- [& x5 }* s
! s; g- z; z' c* A! [( H8 E    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 X4 Y4 i+ {' N* Y/ y' w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" r& m5 d+ `8 c$ Q
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 J0 q; n0 w9 u2 u* y+ A4 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. _+ ^- f+ z( x. M& K; f& n
8 j. @( ^+ |* N7 p# f
    CSR = 0x0000;  M5 H* @6 h1 |
    INTC_INTMUX1 = 0x3d;5 R+ U8 l* `! Y: K' L% A
    ISTP = (unsigned int)vectors;
; b+ A. ?5 P' }2 ?" m- e5 P2 ~    ICR = 0xFFF0;  
4 \& ^4 F! C+ j    IER |= 0x12;  
  o' ~$ K" q+ y    CSR |= 0x01;  2 e5 X  S" A: Y* j( }  ~
5 t+ g7 C4 J5 A2 o$ s* {, ?  ~

! V+ ^8 v) k9 w4 R1 U
6 V) L3 W4 ]3 L# f: T9 x( I0 {$ P还有就是两个输入输出函数:* q" a8 d4 o+ H5 F& `
void output_sample(Int32 out_data)2 T1 T! `$ q7 D8 Z1 I
{
3 ?; S3 }3 a: h4 _$ J  AIC31_data.uint = out_data;  
- ?. t  l' l! B2 f( d  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& j+ S# [7 v% T1 R' G}
# n( q- H, s4 X: _! F# Q! z) w; z' b4 w6 s
Int32 input_sample(void)
9 _. X% A- ^0 ?1 y' n% e{  ( x' y' E4 K1 R6 O& s+ n; F5 C
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 v" ]3 c# H  I4 L( K3 O  return (AIC31_data.uint);
1 Z+ L+ ~6 x+ U" [# M}: W% b' S: `' h8 d5 v( R& m

6 \- H/ X( d/ i
分享到:  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-15 00:07 , Processed in 0.041577 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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